Я только что наткнулся на это на GitHub.
($config === NULL) and $config = Kohana::config('email');
Это эквивалент
if ($config === NULL) { $config = Kohana::config('email'); }
Это обычное явление? Буду ли я ожидать, что другие разработчики рассмотрят мой код, если я воспользуюсь этим первым способом, чтобы сразу узнать, что он делает?
Потребовал мне секунду, чтобы получить его, но это должно работать практически на каждом языке программирования. Поскольку операторы «и» или «или» оцениваются лениво, если инструкция слева ложна, тогда нет необходимости оценивать остальные утверждения, потому что все выражение всегда будет ложным (false и true – false). Точно так же вы можете сделать это с помощью «или», но утверждение слева должно быть истинным, а одно справа не будет оцениваться.
PS: В этом случае не имеет значения, что то, что справа, не является булевым выражением; он просто примет значение истинности $config
И является логическим оператором PHP.
($config === NULL) and $config = Kohana::config('email');
имеет эквивалентный результат ( но имеет меньший приоритет оператора ) до
($config === NULL) && $config = Kohana::config('email');
Лично, чтобы избежать путаницы, я бы использовал ваш второй подход.