Разница между «&&» и «и»: приоритет оператора и короткое замыкание

Я просматривал раздел о приоритете операторов на php.net и наткнулся на этот пример , в котором говорится

$a = 1;
$b = null;
$c = isset($a) && isset($b);
$d = ( isset($a) and isset($b) );
$e = isset($a) and isset($b);
var_dump($a, $b, $c, $d, $e);
//Result:
int(1)
NULL
bool(false)
bool(false) <== I get this
bool(true)  <== I do not get this

, что я использую довольно много отладки и подробной печати (_r ) в моем коде, чтобы отслеживать, где я нахожусь в коде. Поэтому я использую $ debug и print_r ($ dataArray) или $ verbose и печатаю «Обновление массива данных \ n» как отдельные операторы между кодом, что позволяет мне управлять этими операторами print (_r) .Это связано с моим опытом работы с BASH, когда я писал много [[$ condition]] && {#Do if true} || {#Do if false} . В BASH я знал, что они закорочены, и использовал этот факт для написания множества простых однострочников.
Теперь я наблюдаю, как эта практика (написание $ verbose и print ) медленно проникает в мои if утверждения. Я знаю, что это НЕ рекомендуемая практика , и я могу укусить меня за спину . Тем не менее, я действительно хочу овладеть этим навыком, так как мне нравится писать такие строчки, и я хочу использовать их в качестве своего личного стиля .

Итак, мой вопрос (и):

  1. Какой оператор ( && или и ) закорочен?
  2. В руководстве указано && имеет приоритет над и , но может ли кто-нибудь проиллюстрировать это, смешав функцию / функциональность / характеристику короткозамкнутого оператора с приоритетом оператора. (в основном сочетание и соответствие приоритета и короткого замыкания)

Пожалуйста, поясните, как короткое замыкание, так и возвращаемое значение имеют характер операторов.

PS: 1. Я надеюсь, что ассоциативность этих операторов такая же и интуитивно понятная, но если вы знаете какие-то особенности, пожалуйста, просветите меня.
PS: 2. Если вы все еще хотите предостеречь меня от опасностей такой практики, пожалуйста, включите примеры.

РЕДАКТИРОВАТЬ: после изменения моего простого кода $ var = mysql _ (...) или die () путем замены или на || , я обнаружил как может раздражать использование операторов || и && вместо и и или . Код просто не работал ! Насколько я понимаю, первая конструкция присваивает возвращаемое значение TRUE или FALSE для $ var , что, в свою очередь, делает все последовательное использование $ var для генерации предупреждения / ошибки / неожиданного поведения. Последняя конструкция сначала присваивает результат mysql _ (...) $ var , а затем вычисляет соединение = и die .
Это хороший урок для меня, мне лучше 1. Начать использовать PDO / mysqli и самостоятельно обрабатывать ошибки 2. Дважды подумайте, прежде чем писать то, что я назвал выше как личный стиль .
// примечание для себя: не используйте опыт одного языка сценариев / интерпретатора при написании кода на другом, каждый из них уникален и имеет свои особенности и подводные камни, и это просто грустно * вздох *

6
задан JasonMArcher 26 May 2015 в 23:05
поделиться