1

私はPHPとTDD(PHPとPHPUnitを使用)を独学しています。私はKent Beck著のTest-driven Development by Exampleという本に取り組んでいます。

たとえば、第 3 章では、平等テストについて次のように提案しています。

public void testEquality() {
    assertTrue(new Dollar(5).equals(new Dollar(5)));
}

Dollar クラスでは、equals メソッドを次のように書き直しています。

public boolean equals(Object object) {
   Dollar dollar = (Dollar) object;
   return amount == dollar.amount;
}

私が PHP に慣れていないことはおそらく役に立たないでしょうが、それを PHP に変換する方法がわかりません。

私が試した最初の機能について:

public function testEquality(){
    $a = new Dollar(5);
    $this->assertTrue($a->equals($b = new Dollar(5)));
}

これは正しい軌道ですか?私がPHPについて知っている限り、オブジェクトは変数に代入する必要がありますよね?そのルートの前に私が探検した

$this->assertTrue(new Dollar(5)->equals(new Dollar(5))); 

構文エラーをスローしました。ただし、以前の testMultiplication メソッドを pass でリファクタリングすると驚くべきこと$this->assertEquals(new Dollar(10), $five->times(2));です。

メソッドに関する限りequals、それは私にはまったくなじみがなく、どこから始めればよいかわかりません。

上記をPHPで正しく再構築するにはどうすればよいですか? いくつか正しく理解できれば、残りの例を処理できると思います。

副次的な質問として、この Money の例が PHP でアプローチされているかどうか、そしてコードが公開されているかどうかを知っている人はいますか?

4

1 に答える 1

1

あなたのコードは次のとおりです

public boolean equals(Object object) {
   Dollar dollar = (Dollar) object;
   return amount == dollar.amount;
}

そして、それはこれを意味します(行ごとに)

  1. or and 型のオブジェクト(Java ではすべてのオブジェクトを意味する) を引数として期待する、呼び出さequalsれる新しいメソッドを定義するtruefalseObject
  2. 型のオブジェクトを型Objectに変換しますDollar (型変換に関するウィキ)。これで、このオブジェクトのパブリック メソッドと属性を使用できるようになりました。
  3. amount現在のコンテキストの属性を、 dollar(から来るobject)からの属性と比較します。

型キャストを必要とせずに、メソッドを 1 行ずつ PHP に変換できるようになりました。

public function equals($object)
{
    return $this->amount == $object->amount;
}

別のメソッド宣言を使用することも可能です:

public function equals(Dollar $object)

このようにして、同じタイプの 2 つのオブジェクトのみを確実に比較できます。

使用法も Java のものと似ています。

$a = new Dollar(5);
$b = new Dollar(5);
if ($a->equals($b))
    print "TRUE";
else
    print "FALSE";

PHP でのオブジェクト比較の詳細については、マニュアルを参照してください。

于 2013-04-28T10:22:02.690 に答える