저는 Kent Beck의 Test Driven Development by Example을 통해 작업했으며, PHP 학습 예제를 언어 습득 연습으로 재 작성했습니다.PHP에서 객체 인스턴스와 생성 이해하기
제 2 장에서는 객체를 생성 할 때마다 새로운 객체 (예 : 객체가 달러라고 함)가 반환되도록 클래스 메소드와 단위 테스트를 다시 작성하는 방법을 설명합니다 (이 예에서는 타임스).
class Dollar {
public $amount;
public function __construct($amount) {
$this->amount = $amount;
}
public function times($multiplier) {
return new Dollar($this->amount *= $multiplier);
}
}
그리고 내 테스트는 다음과 같습니다 :
지금까지, 내 수업은 다음과 같습니다
이public function testTimes()
{
$five = new Dollar(5);
$product = $five->times(2);
$this->assertEquals(10, $product->amount);
$product = $five->times(3);
$this->assertEquals(15, $product->amount);
}
첫 번째 어설 전달합니다. 두 번째 어설 션이 실패하고 30이 반환됩니다.
개념적으로 왜 30을 반환하는지 알지만 새 Dollar 개체가 올바르게 인스턴스화되고 반환되도록 times 메서드를 다시 작성하는 방법을 모르겠습니다. times 메소드를 다시 작성하려면 어떻게해야합니까? $product
이 두 번째로 $five->times(3)
으로 전화 할 때 새 개체 인스턴스가 아닌 이유는 무엇입니까?
EDIT - PHP에서 여기에 다시 쓰여진 몇 가지 예제가 있는데,이 상황을 설명하는 어떤 것도 발견하지 못했습니다. (또는 $ 제품에 할당 된 새 오브젝트가없는 이유를 설명했습니다. 그것을).
이되지는 $ 제품 –
감사 @MarkBaker에 대해 - (자바 책에 기록) 원래 시험 2 어설는 같이 쓸 자바에서 $ 오 (가리키는 않는다 : product = 5x (3)), 그래서 나는 $ product 객체 인스턴스와 동일한 작업을 수행했다. 나는 내가 할 수있는 한 밀접하게 따라 갔다. 대신 무엇을 참조해야합니까? –