【发布时间】:2022-01-14 16:52:39
【问题描述】:
“DerivedClass”类扩展“BaseClass”。它实例化一个 ProcessDerived 类型的对象,将 $this 传递给构造函数:
$object = new ProcessDerived($this); // $this extends BaseClass
一系列的DerivedX类都有自己的ProcessDerivedX类,所有的ProcessDerivedX类都派生自ProcessBase。为了使代码更通用,ProcessDerivedX 类有一个可以接受任何 BaseClass 的构造函数。
/**
* Constructor accepts object of type BaseClass
*
* @param BaseClass $parent
*/
function __construct($parent) { $this->parent = $parent; }
这允许 Intellisense 检测以下引用的问题:
$result = $this->parent->baseFunction();
由于 $this->parent 是 BaseClass 类型,我们知道 baseFunction 必须存在于任何 DerivedClassX 中。
但是当我们特别打算在 ProcessClassX 中使用 DerivedClassX 的函数时,我们期望 $this->parent 是 DerivedClassX,具有未在 BaseClass 中定义的函数。
所以问题是,我们如何注释这样的引用,以便 Intellisense、调试等识别baseFunction()?
例子:
/** @var DerivedClassX $this->parent Specific to derived class */
$result1 = $this->parent->uniqueFunction();
/** @var BaseClass $this->parent Specific to base class */
$result2 = $this->parent->baseFunction();
$this->parent 的上述语法不起作用。我正在寻找有效的语法。 :)
【问题讨论】:
标签: php oop annotations phpdoc