2017-02-23 20 views
1

我经常使用(Dispatcher::Instance())->someFunction();之类的东西,如果我只需要一个对象的函数一次,所以我不必“浪费”一个新的变量。为什么这不适用于某些安装? (分派::实例()) - > someFunction();

原来,这似乎并没有对一些PHP工作设施与中止(PHP5):

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

我知道,我可以用一个变量规避这一点,但我想知道为什么有一个错误。在发行说明中找不到任何内容。此外,我不知道要搜索什么。有人可以帮忙吗?

+0

在这种情况下你能不能只删除'()',只是做'调度::实例() - > someFunction();'?我可以看到你是否正在执行'(new Instance()) - > someMethod()',那么你需要'()'包装器。 – Rasclatt

+0

学到了新的东西。 – Rasclatt

+0

看这里https://3v4l.org/6kePK – Deadooshka

回答

0

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

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

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

理想的情况下,任何地方,你看整个堆栈交换网络, static'联盟调用这些方法似乎更有效率。

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

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


我建议你做任何决定这样做,因为你之前,你借此忠告与您当前是:

一般来说,你应该用静态的方法时, 方法问题与任何未通过 作为参数的国家都没有任何关系,并且与所涉及的类的抽象概念 有关,而不是与具体实例相关。那 是,该函数涉及的东西的想法,而不是自己的东西, 事情。

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

+0

这似乎走在正确的方向。尽管如此,它仍然在我的服务器上使用PHP 5.5.9失败,但我现在有了一个想法。谢谢。 – christian

+0

@christian这很奇怪!你已经确认你的版本? – Darren

相关问题