2012-03-07 14 views
6

Stavo esaminando il libro "Test-Driven Development By Example" dell'autore Kent Beck.Oggetto della classe Dollar non può essere convertito in int

Sto provando a scrivere una funzione simile in PHP ma non capisco i passaggi.

funzione originale:

Funzione di prova:

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

funzione Classe:

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

Il mio codice:

Funzione di prova:

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

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

Classe Funzione:

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

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

Durante l'esecuzione del test case sto ottenendo il seguente errore.

oggetto di classe dollaro non può essere convertito in int

bisogno di un certo aiuto su questo. Come posso risolvere questo?

+0

Cosa è '$ this-> Oggetto = $ oggetto;' buono? – KingCrunch

risposta

6
return $this->amount == $this->Object; 

$this->amount è un int, $this->Object non è un int. Si è tentato di confrontare tra di loro, in tal modo si otterrà

oggetto di classe dollaro non può essere convertito in int

Probabilmente significa

return $this->amount == $this->Object->amount; 

Tuttavia, c'è anche qualcosa curioso nella tua classe

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; 
    }  
} 

probabilmente vorrai solo

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