NetBeans 自动完成和 PHP;强制 __get() 类型
Posted
技术标签:
【中文标题】NetBeans 自动完成和 PHP;强制 __get() 类型【英文标题】:NetBeans autocomplete & PHP; force __get() type 【发布时间】:2011-10-08 17:31:19 【问题描述】:NetBeans 7.0 上的快速操作和 php 的自动完成功能;
我正在试图弄清楚(如果可能)如何强制在一个类中实现的__get()
返回(参考)某个类型,该类型始终与实现__get()
的类相同。
现在,我有(View
):
/**
* @param string $key
* @return View
*/
public function __get($key)
return $this->getView($key);
这样访问:
$view->foo-> // should populate with methods from View
^
现在我一直在阅读有关 @property
的信息,但我不确定这是否适合我正在做的事情。另一件事是(如果可能的话,这将是一个很好的功能)通常视图是嵌套的,所以在我的实现中看到这种情况并不少见:
$view->foo->bar->baz-> // should populate with methods from View
^
关于如何强制执行此操作的任何想法,还是我被卡住了?
更新:
所以@property
似乎正朝着正确的方向前进,但是似乎不支持对属性名称进行通配符。因此,为了详细说明我的问题,是否有人知道任何 NetBeans 插件或未记录(或只是很难找到)支持通配符 @property
名称的 PHPDoc 语法?
我正在考虑以下方向之一:
/**
* @property View *
* @property View ...
* @property View $var,...
*/
当然,这些变体都不起作用,但最后一个似乎最合乎逻辑,因为它们似乎支持可变参数函数参数列表的类似语法。
【问题讨论】:
我还没有看到任何 IDE 可以正常使用魔术方法。 您可能可以为您编写某种附加组件,也许可以将类型View
分配给 View
的所有无法识别的属性。
那真是太不幸了。特别是因为我不精通 Java,也不知道从哪里开始插件开发(虽然那会很好)
【参考方案1】:
Netbeans 可以使用@property
为您发挥这种魔力,如下例所示。
正如您已经知道的,您必须在 doc 块中定义每个属性。
下面列出了您的$x->y->z->view
示例的另一种可能的解决方案。
将其复制并粘贴到 Netbeans 中,它将显示 Bar 类的方法:
<?php
/**
* @property Bar $prop
*/
class foo
class bar
public function xyz()
public function abc()
$x = new foo();
$x->prop->
当你将光标移到这里并按 ctrl+space 你会看到:
如果你想自动完成更长的结果链,你也可以使用
/** @var Viewclass $foo */
$foo = $x->y->z->view;
$foo->autoCompleteWorksNow();
代码中的任何位置。
【讨论】:
谢谢@edorian - 是的,我已经想通了很多,但是(我敢肯定这是一个远射)有没有办法强制所有可见属性以这种方式行事?诸如@property Bar *
? 之类的语法
还有;你的字体相当大。我相信我在某处读到这是一个“良好实践”,因为它鼓励更短的方法主体,那里有任何有效性吗?
@tomcatExodus 我至少不知道;对于字体大小:我可以在屏幕上看到大约 45 行。这对于我 like
阅读的任何方法都足够了 :) 而且,当您不必拥抱阅读所有内容时,它使配对变得更加容易。这是主要原因;)
也适用于 PhpStorm。谢谢!以上是关于NetBeans 自动完成和 PHP;强制 __get() 类型的主要内容,如果未能解决你的问题,请参考以下文章