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

hell0w0rd

Продвинутый новичок
Заметил что часто люди пишут так:
if (false === smth()) {}
if (0 === strpos(...)) {}
Неужели так удобней читается, или это какой-то стандарт, или быстрее работает? В общем зачем?
 

shelestov

я тут часто
Если вы где то напишите if ($s = true) {} ошибки не будет, если if (true = $s) {} будет. :)
Сам же не вижу смысла в этом. Возможно для кого то так читабельнее.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
PHP:
if ('foo' = $foo) {
   //
}
даст фатальную ошибку

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

Ну и читать так удобнее, да.
 
  • Like
Реакции: Mols

hell0w0rd

Продвинутый новичок
shelestov
Ну обычно подобный код 100% покрывают тестами....
То есть только ради того чтобы не опечататься?
 

hell0w0rd

Продвинутый новичок
shelestov
Я когда код с такими сравнениями читаю - постоянно об них спотыкаюсь... думаю дело привычки:)
Спасибо за ответы
 

hell0w0rd

Продвинутый новичок
Еще кстати этот вариант нужен в таких случаях:
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)
}
Но на мой взгляд это еще сложнее читается
 

Mols

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