假设我有以下模型:
class PackageModel
{
public $name;
public $price;
}
我有以下集合抽象类:
abstract class Collection
{
protected $items = [];
public function addItem($obj, $key = null) {
if ($key == null) {
$this->items[] = $obj;
} else {
if (isset($this->items[$key])) {
throw new KeyAlreadyExistsException("Key $key already exists.");
} else {
$this->items[$key] = $obj;
}
}
}
public function deleteItem($key) {
if (isset($this->items[$key])) {
unset($this->items[$key]);
} else {
throw new InvalidKeyException("key $key does not exist");
}
}
public function getItem($key) {
if (isset($this->items[$key])) {
return $this->items[$key];
} else {
throw new InvalidKeyException("key $key does not exist");
}
}
}
我希望能够创建一个PackageModel
的集合,从而创建一个集合,每当我从集合中获取一个项目时,我的代码中都会包含自动完成。
一个简单的解决方案是扩展集合并将phpdoc添加到getItem函数并像这样调用父函数:
class PackageCollection extends Collection
{
/**
* @return PackageModel
*/
public function getItem($key)
{
parent::addItem($key);
}
}
但是每次我扩展集合类时都需要我这样做。
有没有办法绕过它并以某种方式让它熟悉我想要的特定型号?