【问题标题】:PHP OOP DocBlock @var for $this->varPHP OOP DocBlock @var for $this->var
【发布时间】: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


    【解决方案1】:

    解决此问题的方法是简化语法。我不喜欢这样,但现在这就是我正在做的事情。

    $the_parent = $this->parent;
    /** @var DerivedClassX $the_parent */
    $result1 = $the_parent->uniqueFunction();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2011-03-24
      • 2019-02-10
      • 2021-10-26
      相关资源
      最近更新 更多