クラスに次のことを考えてみましょう:オーバーライドされた親メソッドに対するより厳密な型ヒント?
class objectCollection implements Iterator {
private $objectArray = [];
private $position = 0;
public function __construct() {
$this->position = 0;
}
public function add($object){
if(!in_array($object, $this->objectArray))
$this->objectArray[] = $object;
return $this;
}
public function remove($object){
if(($key = array_search($object, $this->objectArray())) !== false)
unset($this->objectArray[$key]);
return $this;
}
public function rewind() {
$this->position = 0;
}
public function current() {
return $this->objectArray[$this->position];
}
public function key() {
return $this->position;
}
public function next() {
++$this->position;
}
public function valid() {
return isset($this->objectArray[$this->position]);
}
}
class attachmentCollection extends objectCollection {
public function add(attachment $attachment){
return parent::add($attachment);
}
public function remove(attachment $attachment){
return parent::remove($attachment);
}
}
これはfollwingエラーを生成しますattachmentCollectionの 宣言::追加は、()objectCollectionと互換性があります::($オブジェクト)を追加
をあなたが見てみるとコード、私はそれがむしろ明らかに私が何をしようとしていると思う。 attachmentCollection
は、objectCollection
と基本的に同じですが、追加(または削除)できるオブジェクトはattachment
のインスタンスである必要があります。
これを行う正しい方法は何ですか?
限り私は知っている、PHPは、より高い言語によって行われるように同じ方法でオーバーロードをサポートしていない...それらは同じ署名を持っている必要があります... –
ああ、大丈夫です。それは酷いことだ。 – minychillo