Я начал писать класс-оболочку для предопределенного пакета php. Вот классы:instanceof error in php wrapper class
class phpclass1
:: ping()
:: __construct(array $options)
:: clear()
:: addDoc(phpclass2 $string)
...
class phpclass2
:: __construct()
:: update()
...
Здесь приведены классы-оболочки, которые я написал для выше 2 класса:
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);
Все работало, пока я не использовал функцию add
. Он дает ошибку: Argument 1 passed to phpclass1::addDoc() must be an instance of phpclass2, instance of wrapper2 given
Что мне не хватает? Я много пробовал, но полностью проиграл.
Аргумент 'phpclass1 :: addDoc()' имеет тип-тип как 'phpclass2', и вы передаете его' $ document', что является 'wrapper2'. Если 'wrapper2' не расширяет' phpclass2', подсказка типа не будет выполнена. –
@MichaelBerkowski: Я пробовал это, но была некоторая ошибка. (Я предполагаю, что пакет php, который я использую, не может содержать такое дублирование/клонирование экземпляров). Поэтому мне было интересно, может ли быть какой-то другой способ. – xan
Нам нужно будет увидеть, что такое ошибка. Пока вы не пытаетесь переопределить методы 'final' или' private', вы должны иметь возможность расширить класс save для некоторого потенциально экзотического случая. –