Ho iniziato a scrivere una classe wrapper per un pacchetto php predefinito. Qui ci sono le classi:instanceof error in php wrapper class
class phpclass1
:: ping()
:: __construct(array $options)
:: clear()
:: addDoc(phpclass2 $string)
...
class phpclass2
:: __construct()
:: update()
...
ecco le classi wrapper che ho scritto per il sopra 2 classi:
class wrapper1 {
private $conn;
public function __construct(phpclass1 $object) {
$this->conn = $object;
}
public function add(wrapper2 $document) {
return $this->conn->addDoc($document);
}
}
class wrapper2 extends phpclass2 {
private $doc;
public function __construct() {
$this->doc = new phpclass2();
}
}
Here's how I'm using them:
$options = array (...);
$object = new phpclass1($options);
$conn = new wrapper1($object);
$doc = new wrapper2();
....
....
$conn->add($doc);
Tutto stava funzionando fino a quando ho usato la funzione add
. Si dà un errore: Argument 1 passed to phpclass1::addDoc() must be an instance of phpclass2, instance of wrapper2 given
Cosa mi manca? Ho provato molte cose, ma completamente perso qui.
L'argomento di 'phpclass1 :: addDoc()' è digitato come un 'phpclass2' e lo si passa' $ document', che è un 'wrapper2'. A meno che 'wrapper2' non estenda' phpclass2', il tipo hint fallirà. –
@ Michael Berkowski: Ci ho provato, ma c'era qualche errore. (Immagino che il pacchetto php che sto usando non possa intrattenere tale duplicazione/clonazione di istanze). Quindi mi chiedevo se ci potesse essere un altro modo. – xan
Avremmo bisogno di vedere quale sia l'errore. Finché non si tenta di sovrascrivere i metodi 'final' o' private', si dovrebbe essere in grado di estendere il salvataggio di classe per qualche caso potenzialmente esotico. –