В PHP (и многих других языках) логические операторы используют оценку короткого замыкания . Это означает, что если результат выражения уже определен после вычисления части выражения, то остальные больше не будут оцениваться.
В вашем примере isset($var)
возвращает false. Поскольку оператор &&
определен так, что он истинен, только если все его подвыражений верны, это означает, что он не может быть истиной, если левое подвыражение ложно. Следовательно, правильное подвыражение не будет оценено (и не вызовет ошибку).
Оценка короткого замыкания очень полезна, поскольку вы можете объединить подвыражение, которое может привести к ошибке времени выполнения, с другим, которое гарантирует, что этого не произойдет. Примером является тот, который вы дали. Другие языки часто используют аналогичную конструкцию для конструкций null-save , например if (foo != null && foo.bar == 1)
в Java или C # - foo.bar
вызовет исключение, если foo будет нулевым, но достоинства оценки короткого замыкания гарантируют, что это никогда не будет оценено.