【发布时间】:2017-08-15 17:09:32
【问题描述】:
考虑以下类:
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);
}
}
这会产生以下错误: attachmentCollection::add() 的声明应该与 objectCollection::add($object) 兼容
当您查看代码时,我认为我正在尝试做的事情相当明显。
我希望attachmentCollection 与objectCollection 基本相同,只是可以添加(或删除)的对象必须是attachment 的实例。
这样做的正确方法是什么?
【问题讨论】:
-
据我所知,php 不支持重载的方式与高级语言所支持的方式相同...那些必须具有相同的签名...
-
哦,好的。真可惜。
标签: php inheritance type-hinting