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