我正在研究Magento模板,但这个问题适用于任何模板加载系统。
由于这些模板是由模板引擎加载的,因此IDE(在本例中为Aptana)无法知道$ this的对象类型。
可能多个对象可以加载多个对象作为单个模板,但忽略这一点,为$ this对象指定特定类的正确phpdoc语法是什么?
答案 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可以去的。
答案 2 :(得分:0)
我发现用@var为$定义一个类型不起作用 - 大概是因为$这是特殊的,并且被Aptana视为这样。我对海报有类似的需求 - 我在模板文件中(在我的情况下只是简单地定位并包含在数据类中的函数中),我希望为$ this设置一个类型。正如@ashnazg所说,不需要在类定义中为$ this设置类型,因为$ this的类型始终是类的类型(直到继承)。
但是,模板文件有一种解决方法。在模板文件的顶部只需输入类似
的内容/**
* @var My_Data_Model_Type
*/
$dataModel = &$this;
然后只需使用$dataModel
(或您选择的任何内容 - 可能更短的内容)而不是模板中的$this