【问题标题】:Extending type-hinting for PHP为 PHP 扩展类型提示
【发布时间】:2012-12-24 16:42:05
【问题描述】:

是否可以在 Netbeans 中使用另一个文档标签来扩展类型提示?

我正在寻找一种使用 @scope 标签扩展类型提示的方法,该标签允许包含的文件访问对象范围。

例子:

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

这将只允许对公共变量和方法进行类型提示。我希望做的是使用@scope 标签扩展类型提示,使其能够访问 MyObject 范围:

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

这会使文件内容表现得像在 MyObject 范围内一样,$this 会暗示私有方法。

现在,我没有为 Netbeans 平台开发的经验,但我有 Java 经验。如果我想做到这一点,我该从哪里开始?

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

【问题讨论】:

  • 我也在寻找几乎类似的东西,在下面的link 中有解释。但是我想要它用于 php,而链接只解释了如何为 java 做它

标签: php netbeans type-hinting


【解决方案1】:

在过去(旧版本的 NetBeans)中,类型提示会显示类(正在使用的对象)的所有方法,即所有公共、受保护、私有甚至静态方法。现在,在 NetBeans 的新版本中,这个 错误 已得到修复,当对对象进行类型提示时,仅对可访问的方法/属性进行类型提示。

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

如果您愿意在类内部进行类型提示,这同样适用 - 现在类型提示列出了 $this-&gt;|| 是光标)的所有公共、受保护和私有方法,而静态属性和方法仍未列出。另一方面,如果您是MyClass::| 的类型提示,现在只列出静态属性/方法,并且再次在 MyClass 类中列出所有公共、受保护和公共的从外部访问时,列表中缺少(非常正确)。

所以您请求的功能是错误的,并且否定了正确的封装原则。

【讨论】:

  • 这可能适用于 Java 或其他语言,但 PHP 允许将类的范围扩展到另一个文件。这种行为只需通过include 类方法中的另一个文件即可实现。在这种情况下,文件可以访问封闭类(甚至是私有的)的所有方法和属性。该机制与其他语言中的partial classes 非常相似,只是它在 PHP 中没有正式的语法,并且必须使用类型提示。这种机制在许多 PHP 框架的视图模板中非常常用。这是否是一个好的做法是另一回事。
  • 我会说这是一个非常好的做法,因为您将标记与代码完全分开。即,我创建了视图CreateUserView -&gt; CreateUserView.php,并连同该文件一起创建了模板作为CreateUserView.tpl.php,我的扩展视图CreateUserView 自动加载,并且模板是具有相同范围的类的一部分。
【解决方案2】:

我知道我们不应该建议任何工具,但有时我无法抗拒人们试图用错误的工具解决问题的感觉。在我看来,NetBeans 正在慢慢追随 Eclipse 的步伐,随着时间的推移,它几乎完全放弃了对 PHP 的支持。然而,还有其他一些专为 PHP 语言设计的 IDE,可以解决一些开箱即用的问题。

就我个人而言,我想要一个从一开始就为我提供大部分功能的工具。我对编写插件不感兴趣,这需要我的时间,并且随着时间的推移可能会被弃用。所以我选择了一个商业 IDE,它给了我比我需要的更多的东西,顺便说一句 - 它完美地满足了您在问题中包含的需求。如果您要编写 PHP 代码,那么我强烈建议您考虑购买专业工具。

关于问题本身,我将提供一个指向功能请求的示例链接,它显示了问题是如何解决的:Allow protected member access on @var $this (i.e. in views)。还有更多related features,您可能会觉得有趣。

所以总结一下我的观点是:如果你要拧紧螺丝,那就用螺丝刀,而不是锤子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2011-05-14
    • 2022-10-24
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    相关资源
    最近更新 更多