【问题标题】:Why isn't this working on some installations? (Dispatcher::Instance())->someFunction();为什么这不适用于某些安装? (Dispatcher::Instance())->someFunction();
【发布时间】:2017-02-23 06:31:03
【问题描述】:

如果我只需要一次对象的函数,我经常使用(Dispatcher::Instance())->someFunction(); 之类的东西,这样我就不必“浪费”一个新变量。

事实证明,这似乎不适用于某些 PHP(PHP5?)安装中止:

Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ',' or ';'

我知道,我可以通过使用变量来规避这一点,但我想了解为什么会出现错误。在发行说明中找不到任何内容。我也不确定要搜索什么。有人可以帮忙吗?

【问题讨论】:

  • 在这种情况下,您可以不只删除() 而只执行Dispatcher::Instance()->someFunction(); 吗?我可以看到你是否在做(new Instance())->someMethod(),那么你需要() 包装器。
  • 学到了一些新东西。
  • 看这里3v4l.org/6kePK

标签: php


【解决方案1】:

这称为“实例化类成员访问”,包含在 PHP v5.4.0 版本中。 (see release notes)

它允许实例化与您的示例一起显示的类(无需将其分配给变量):

(Dispatcher::Instance())->someFunction();

理想情况下,无论您查看整个 Stack Exchange 网络的任何位置,static'ally 调用这些方法似乎都更有效。

Ref #1Ref #2Ref #3....等。只需搜索->“实例化类成员访问”

为了回答您的问题,抛出此错误与 php >= 5.4 之前不存在此功能有关,因此定义为关闭 ; 的变量/实例的“要求”。


我建议您在做出任何决定之前先听听这条建议:

一般来说,当方法在 question 与任何未传入的状态都无关 作为它的论据,更多地与抽象概念有关 所涉及的类,而不是一个具体的实例。那 也就是说,功能与事物的概念有关,而不是与事物的概念有关 事物本身。

Source: Reddit - When is it appropriate to use static methods over class member access on instantiation and vice versa?

【讨论】:

  • 这似乎是朝着正确的方向发展。使用 PHP 5.5.9 在我的服务器上仍然失败,但我现在知道要搜索什么。谢谢。
  • @christian 这很奇怪!你已经确认了你的版本?
猜你喜欢
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
相关资源
最近更新 更多