繁体   English   中英

PHP OOP DocBlock @var for $this->var

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM