Зачем аргумент, с которым сравнивают ставят перед сравниваемым?

hell0w0rd

Продвинутый новичок
Заметил что часто люди пишут так:
if (false === smth()) {}
if (0 === strpos(...)) {}
Неужели так удобней читается, или это какой-то стандарт, или быстрее работает? В общем зачем?
 
Если вы где то напишите if ($s = true) {} ошибки не будет, если if (true = $s) {} будет. :-)
Сам же не вижу смысла в этом. Возможно для кого то так читабельнее.
 
PHP:
if ('foo' = $foo) {
   //
}
даст фатальную ошибку

PHP:
if ($foo = 'foo') {
    //
}
даст трудноотлавливаемый баг.

Ну и читать так удобнее, да.
 
  • Like
Реакции: Mols
shelestov
Ну обычно подобный код 100% покрывают тестами....
То есть только ради того чтобы не опечататься?
 
shelestov
Я когда код с такими сравнениями читаю - постоянно об них спотыкаюсь... думаю дело привычки:)
Спасибо за ответы
 
Еще кстати этот вариант нужен в таких случаях:
PHP:
$str = 'test';
if(2 === $pos = strpos($str, 'st')) {
    var_dump($pos); // int(2)
} else {
    echo 'Yet another pos: '.$pos;
}

if($pos = strpos($str, 'st') === 2) {
    var_dump($pos); // bool(true)
}
Но на мой взгляд это еще сложнее читается
 
hell0w0rd
Сам так пишу всегда.
После того, как потратил несколько раз уйму времени на поиск ошибок из-за выражений вида
PHP:
if ($foo = 'foo') {
    //
}
А вообще Вы счастливчик, если у Вас при работе с PHP не было таких багов.
 
Сверху