![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
AnemoN |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 16.4.2008 Репутация: нет Всего: нет |
Здравствуйте!
Небольшой вопрос по поводу работы интерпретатора с выражениями следующего вида:
Собственно вопрос: гарантировано ли в подвыражении isset($var['error']) переменная $var уже будет содержать возвращенное функцией func значение? Простой тест:
показывает что содержит, но если я кажется когда-то слышал что поведение в таком случае может быть непредсказуемым. Может кому-то встречался конкретный док, разъясняющий этот момент? |
||||
|
|||||
Arantir |
|
||||||||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Интерпретатор обрабатывает функции по приоритетам. Там, где приоритет равен - это последовательное выполнение слева направо (в случае логических функций). То есть, в случае ИЛИ: выполнить левую часть, выполнить правую часть, сравнить результаты через ИЛИ.
Интерпретатор не обрабатывает код дальше, если дошел до момента, когда логическое выражение гарантированно примет одно из возможных булевых значений. То есть, после "false &&" уже нет смысла продолжать. Возможно это просто оптимизация, но благодаря этому весьма распространен и прекрасно существует такой код:
И не трудно убедится, что следующий код работать не будет (ошибка "Undefined variable"):
Вот этот код не выдаст ошибки:
В вашем случае поведение вполне предсказуемо. Если $var будет равно true, то будет выполнено isset($var['error']), если нет - не будет выполнено. В обеих случаях $var будет присвоено значение до выполнения isset(). Добавлено @ 01:33 Вот док, вполне все разъясняющий: http://php.net/manual/ru/language.operators.precedence.php Это сообщение отредактировал(а) Arantir - 13.12.2012, 01:38 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||||||
|
|||||||||
AnemoN |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 16.4.2008 Репутация: нет Всего: нет |
Спасибо!
Угомонили мою паранойю |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |