2013-01-10 38 views
12

是否可以使用Netbeans中的另一个documentor标记来扩展类型提示?PHP的扩展类型提示

我正在寻找一种方法来扩展带有@scope标签的类型提示,以允许包含的文件访问对象作用域。

例子:

file: template.php 
<?php /* @var $this MyObject */ 

这将只允许公共变量和方法的类型提示。什么我希望做的是扩展与@scope标签允许它访问的MyObject的范围类型提示:

file: template.php 
<?php /* @scope MyObject */ 

这将使该文件内容像这将是在为MyObject范围和$this会提示私人方法。

现在,我没有开发Netbeans平台的经验,但我有Java经验。如果我想完成这个任务,我会从哪里开始?

希望这不是一个问题太弱。

+0

我也在寻找几乎类似的东西,在[链接](https://platform.netbeans.org/tutorials/nbm-java-hint.html#creatingthemoduleproject)中解释。然而,我希望它的PHP,而链接只解释了如何做到这一点为java –

回答

2

在过去(NetBeans的旧版本),类型提示显示了一个类(其中的对象正在使用)中的所有方法,即所有公共,受保护,私有,甚至是静态方法。现在,在新版本的NetBeans中,此错误已得到修复,并且在对象上键入提示时,只有可访问的方法/属性被键入提示。

这仅仅是因为你的模板不能访问/调用类的私有属性/方法,以及如果你有一个对象(一个类的实例)你不应该能够访问/调用它的类的静态属性/方法。

如果您愿意在类中键入提示,现在类型提示列出了所有公共,受保护和私有方法$this->||是游标),同时静态属性和方法仍然存在不在名单中。另一方面,如果您在MyClass::|上键入提示,现在只列出了静态属性/方法,并且在类别MyClass类中列出了所有公共,受保护和公用的列表,而在从外部访问时列出了所有公共列表, (非常正确)在列表中缺失。

所以你要求的功能是错误的,并且否认封装的正确原则。

+1

这可能是Java或其他语言,但PHP允许类的范围扩展到另一个文件。这种行为仅仅通过在一个类的方法中包含另一个文件来实现。在这种情况下,文件可以访问封闭类的所有方法和属性(甚至是私有的)。该机制与其他语言中的“partial classes”非常相似,除非它在PHP中没有形式语法,并且必须使用类型提示。许多PHP框架的视图模板通常使用这种机制。这是否是一种好的做法是另一回事。 –

+0

我会说它是一个非常好的做法,因为您完全将代码与标记分开。也就是说,我创建了视图'CreateUserView - > CreateUserView.php',并与该文件一起,我还创建了模板作为'CreateUserView.tpl.php',我的扩展视图'CreateUserView'自动加载,模板是类的一部分具有相同的范围。 – Daniel

0

我知道我们不应该提出任何工具,但有时我无法抵制人们试图用错误的方法解决问题的感觉。在我看来,NetBeans正在慢慢遵循Eclipse的步骤,几乎完全放弃了对PHP的支持。然而,其他IDE严格为PHP语言设计,可以解决一些开箱即用的问题。

就我个人而言,我想要一个工具,可以从一开始就为我提供最需要的功能。我对编写插件不感兴趣,这些插件花费我的时间,可能会随着时间推移而被弃用。所以我选择了一个商业化的IDE,这让我获得了更多的需求,顺便说一句 - 它完美地满足了您的需求。如果您打算编写PHP代码,那么我强烈建议您考虑为专业工具付费。

关于这个问题本身,我只是给一个功能请求的示例链接,它显示了如何添加问题的问题:Allow protected member access on @var $this (i.e. in views)。还有更多related features,您可能会感兴趣。

所以总结我的看法是:如果你要拧紧螺丝,然后使用螺丝刀,而不是锤子。