приоритет оператора — условное назначение PHP

Нашел интересный кусок кода в ядре Symfony

if ('' !== $host = $route->getHost()) {
...
}

Приоритет! == выше, чем =, но как он работает логически? Первая часть понятна, а остальные?

Я создал небольшой образец, но он все еще не ясен: образец

6

Решение

Дело в том, что левая часть присваивания должна быть переменной! Единственный возможный способ добиться этого в вашем примере — это сначала оценить присвоение, что на самом деле делает php.

Добавление скобок проясняет, что происходит

'' !== $host = $route->getHost()
// is equal to
'' !== ($host = $route->getHost())
// the other way wouldn't work
// ('' != $host) = $route->getHost()

Таким образом, условие истинно, если возвращаемое значение $route->getHost() является непустой строкой, и в каждом случае возвращаемое значение присваивается $host,

Кроме того, вы можете посмотреть грамматику PHP

...
variable '=' expr |
variable '=' '&' variable |
variable '=' '&' T_NEW class_name_reference | ...

Если вы читаете оператор руководство по приоритетности страница внимательно, вы бы увидели это уведомление

Хотя = имеет более низкий приоритет, чем большинство других операторов, PHP будет
разрешить выражения, подобные приведенным ниже: if (! $ a = foo ()), в
в этом случае возвращаемое значение foo () помещается в $ a.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]