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() 类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDT/Netbeans 中的类自动完成 PHP 对象?

包含文件的 NetBeans 自动完成功能不起作用?

ThinkPHP如何防止SQL注入?

ThinkPHP教程_PHP框架之ThinkPHP三大自动

Sublime PHP 方法签名和自动完成描述

PHP之overload