将$ this链接到Aptana中的特定类的phpdoc语法是什么?

时间:2010-02-24 22:38:18

标签: eclipse zend-framework magento aptana phpdoc

我正在研究Magento模板,但这个问题适用于任何模板加载系统。

由于这些模板是由模板引擎加载的,因此IDE(在本例中为Aptana)无法知道$ this的对象类型。

可能多个对象可以加载多个对象作为单个模板,但忽略这一点,为$ this对象指定特定类的正确phpdoc语法是什么?

3 个答案:

答案 0 :(得分:3)

您可以这样定义:

/* @var $this type */

其中type是类名

答案 1 :(得分:0)

要明确的是,使用 $ this 只能表示当前类的对象,对吗?

PhpDocumentor目前(v1.4.3)不将 $ this 识别为应该等同于类本身的数据类型的特定关键字。

只有PHP已知的数据类型和已经由PhpDocumentor解析的类才是与@return标记一起使用的正确数据类型值。有一个功能请求可以在PhpDocumtentor中提供一些选项,以帮助记录始终“返回$ this”的流畅方法。 [1]

对于@var标记,我不知道类变量如何包含它自己的类实例是可行的。因此,我无法遵循“@var $ this”应该说的内容。

但是,如果 $ this 的意图,那么“返回$ this”的流畅方法,只是成为PhpDocumentor的一些快捷方式和/或你的IDE通过使用 $ this 来神奇猜测你可能意味着什么数据类型,我不得不猜测没有办法做到这一点。我可以做的最接近的建议是使用父类的名称,该父类是该特定var / return可能在运行时的所有各种子类的公共父类,然后使用标记的描述部分具有内联{@link}标记列出可能的子类。

示例:我有一个父抽象类,其中包含Child1,Child2和Child3子项,每个可能在我的运行时Foo类中出现。

因此,Foo :: _ var在运行时可能是这些子类类型中的任何一种,但我如何记录它?

/**
 * @var Parent this could be any child of {@link Parent}, {@link Child1}, {@link Child2}, or {@link Child3}...
 */
protected $_var;

回到“return $ this”问题,我会以类似的方式记录事情:

/**
 * a fluent method (i.e. it returns this class's instance object)
 * @return Parent this could be any child of {@link Parent}, {@link Child1}, {@link Child2}, or {@link Child3}...
 */ 
public function foo() {
   return $this;
}

以这种方式记录至少允许您的类doc具有指向特定类的链接。它没有做的是突出流利的'。但是,如果您的IDE能够识别类名,那么它可能能够与其他类进行必要的逻辑链接。我认为如果将鼠标悬停在标签描述中的类名上,Eclipse至少可以使用弹出帮助来完成此操作。我认为Eclipse可以使用它来使代码完成中的各种子类的方法可用。它会知道用于代码完成的Parent方法,因为我明确列出的数据类型是Parent,但这就是IDE可以去的。

[1] - http://pear.php.net/bugs/bug.php?id=16223

答案 2 :(得分:0)

我发现用@var为$定义一个类型不起作用 - 大概是因为$这是特殊的,并且被Aptana视为这样。我对海报有类似的需求 - 我在模板文件中(在我的情况下只是简单地定位并包含在数据类中的函数中),我希望为$ this设置一个类型。正如@ashnazg所说,不需要在类定义中为$ this设置类型,因为$ this的类型始终是类的类型(直到继承)。

但是,模板文件有一种解决方法。在模板文件的顶部只需输入类似

的内容
/**
 * @var My_Data_Model_Type
 */
$dataModel = &$this;

然后只需使用$dataModel(或您选择的任何内容 - 可能更短的内容)而不是模板中的$this