A volte nel mio codice, io controllerò per vedere se un particolare oggetto implementa un'interfaccia:PHPUnit, interfacce deriso, e instanceof
if ($instance instanceof Interface) {};
Tuttavia, la creazione di mock detto interfaccia PHPUnit, non posso sembra passare quel test.
// class name is Mock_Interface_431469d7, does not pass above check
$instance = $this->getMock('Interface');
Capisco che avere una classe denominata interfaccia è diversa da una classe che implementa l'interfaccia, ma non sono sicuro di come ottenere accordo con questo.
Sono obbligato a prendere in giro una classe concreta che implementa l'interfaccia? Non sarebbe questo a vanificare lo scopo di utilizzare un'interfaccia per la portabilità?
Grazie
Sì, le teste più fredde prevalgono. Dopo una notte di sonno completo, mi sono reso conto che non stavo usando lo spazio dei nomi completo quando prendevo in giro l'oggetto. –
Caso d'uso leggermente diverso, ma posso controllare se un'istanza è un'istanza di una classe o una simulazione della classe. – kapad
@kapad Vedete, questo è il punto principale del polimorfismo che non dovete sapere se l'oggetto corrente è e l'istanza della classe o un mock. Se hai ancora bisogno di sapere, allora fai qualcosa di sbagliato. P.S. Solo FYI puoi usare la funzione [get_class] (http://ca1.php.net/manual/en/function.get-class.php) per conoscere il nome esatto della classe dell'oggetto – dVaffection