2017-02-23 9 views
1

Я часто использую что-то вроде (Dispatcher::Instance())->someFunction();, если мне нужна функция только один раз, поэтому мне не нужно «отбрасывать» новую переменную.Почему это не работает на некоторых установках? (Грузоотправитель :: Instance()) -> SomeFunction();

Оказывается, это не похоже на работу на некотором PHP установки прерывания с (PHP5):

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

Я знаю, я могу обойти это, используя переменный, но я хочу, чтобы понять, почему существует ошибка. Не удалось найти что-либо в примечаниях к выпуску. Также я не уверен, что искать. Может ли кто-нибудь помочь?

+0

В таком случае можно не только удалить '()' и просто сделать 'грузоотправитель :: Instance() -> SomeFunction();'? Я мог видеть, выполнялся ли вы (новый экземпляр()) -> someMethod() ', тогда вам нужны обертки'() '. – Rasclatt

+0

Узнал что-то новое. – Rasclatt

+0

смотрите здесь https://3v4l.org/6kePK – Deadooshka

ответ

0

Это называется «доступ к члену класса при инстанцировании» и включается в выпуск PHP v5.4.0. (see release notes)

Это позволяет экземпляра класса, как показано в вашем примере (без необходимости присвоить его переменной):

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

В идеале, в любом месте вы смотрите через сеть Stack Exchange,, кажется более эффективным до static 'ally называют эти методы.

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

Смежные вопросы