类Dollar的对象无法转换为int

Deb*_*his 7 php

我正在阅读作者Kent Beck撰写的名为"测试驱动开发实例"的书.

我试图在PHP中编写类似的功能,但不理解步骤.

原功能:

测试功能:

public void testEquality() {
    assertTrue(new Dollar(5).equals(new Dollar(5)));
    assertFalse(new Dollar(5).equals(new Dollar(6)));
}
Run Code Online (Sandbox Code Playgroud)

班级功能:

public boolean equals(Object object) {
   Dollar dollar = (Dollar) object;
   return amount == dollar.amount;
}
Run Code Online (Sandbox Code Playgroud)

我的代码:

测试功能:

public function setup() {
   $this->dollarFive = new Dollar(5);
}

public function testEquality() {
    $this->assertTrue($this->dollarFive->equals(new Dollar(5)));
}
Run Code Online (Sandbox Code Playgroud)

类功能:

class Dollar
{   
  public function __construct($amount) {
    $this->amount = (int) $amount;
  }

   public function equals(Dollar $object) {
     $this->Object = $object;
     return $this->amount == $this->Object;
   }    
}
Run Code Online (Sandbox Code Playgroud)

执行测试用例时,我收到以下错误.

类Dollar的对象无法转换为int

需要一些帮助.我怎样才能解决这个问题?

Kin*_*nch 9

return $this->amount == $this->Object;
Run Code Online (Sandbox Code Playgroud)

$this->amount是一个int,$this->Object不是int.你试图相互比较,因此你会得到

类Dollar的对象无法转换为int

你可能意味着

return $this->amount == $this->Object->amount;
Run Code Online (Sandbox Code Playgroud)

但是,你班上也有一些奇怪的东西

class Dollar {
  public $amount = 0; // <-- forgotten
  public function __construct($amount) {
    $this->amount = (int) $amount;
  }

   public function equals(Dollar $object) {
     $this->Object = $object; // <--- ?!?
     return $this->amount == $this->Object;
   }    
}
Run Code Online (Sandbox Code Playgroud)

你可能只想要

   public function equals(Dollar $object) {
     return $this->amount == $object->amount;
   }    
Run Code Online (Sandbox Code Playgroud)