PHP приоритет оператора вызова стрелки / метода ("->") - PullRequest
3 голосов
/ 05 мая 2020

Я хотел бы иметь ссылку, четко указывающую, где оператор вызова стрелки / метода PHP (->) падает в отношении порядка привязки операторов.

К сожалению, авторитетная PHP справочная страница о приоритете оператора не перечисляет его.

Пример, когда кто-то может сомневаться, может ли это вызвать исключение, потому что $price сначала было преобразовано в string и только потом попытка вызова метода ->times():

return (string) $price->times($quantity);

В ответе укажите, были ли здесь какие-либо изменения между PHP версиями.

Бонус: вызывает ли stati c Оператор (::) имеет тот же приоритет, что и ->?

1 Ответ

5 голосов
/ 05 мая 2020

$foo->bar(...) классифицируется в грамматике PHP как выражение-вызова-члена .

Это форма вызываемого -переменная , которая сама по себе является формой переменной . По сути, вызов функции-члена для объекта имеет такой же приоритет, как и любая другая «необработанная» переменная - $foo->bar(...), и только $foo должен обрабатываться компилятором идентично. Ни один из них не является «оператором», и поэтому они не вписываются в ту же иерархию, что и те, которые перечислены на странице руководства, на которую вы ссылаетесь.

Для вашего бонусного вопроса :: классифицируется как scoped-call-expression , которое имеет тот же «приоритет».

...