[英]PHP OOP DocBlock @var for $this->var
A class“DerivedClass”扩展了“BaseClass”。 它实例化一个 ProcessDerived 类型的 object,将 $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 的 function 时,我们期望 $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 的上述语法不起作用。 我正在寻找有效的语法。 :)
解决此问题的方法是简化语法。 我不喜欢这样,但现在这就是我正在做的事情。
$the_parent = $this->parent;
/** @var DerivedClassX $the_parent */
$result1 = $the_parent->uniqueFunction();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.