В чем смысл обратной записи (null === $value) при проверке значения переменной?

Возможный дубликат:
PHP - обратный порядок в операторе if
Проверка на нуль - какой порядок?

Изучение Zend Framework показало, что они выполняют все проверки переменных в обратном порядке:

public function setBootstrap($path, $class = null) {

   if (null === $class) {    // instead of if($class === null)
      $class = 'Bootstrap';
   }

В чем причина этого?

Подходит ли это также для программирования на Java и C++?


person Green    schedule 13.06.2012    source источник
comment
Я дал ответ на очень похожий вопрос некоторое время назад здесь: stackoverflow.com/questions/10849667/   -  person mishu    schedule 13.06.2012
comment
с равенством то же самое. выражение истинно, если оба значения равны; неважно, на чьей они стороне.   -  person Jeremy Holovacs    schedule 13.06.2012
comment
В моем магазине мы называем это кодом Йоды.   -  person SomeKittens    schedule 13.06.2012


Ответы (4)


некоторые люди считают, что это помогает им избежать написания одного = (присваивание вместо сравнения на равенство)

Я считаю, что преимущество от этого намного меньше, чем потеря читабельности (и, следовательно, ремонтопригодности!)

Люди, которые не тестируют свой код, могут полагаться на этот трюк. И, отвечая на ваш вопрос, да, он подходит для большинства языков, которые унаследовали свой синтаксис от C - я имею в виду подходит, но не рекомендуется.

person Walter Tross    schedule 13.06.2012

Этот стиль называется условия йода.

По сути, он ведет себя так же, как и обычный стиль ( $variable === value ), но с одним преимуществом:

Компилятор выдает ошибку, если вы по ошибке пишете = вместо == или ===. Поскольку вы не можете переназначить константу (в примере значение null), разработчик немедленно распознает ошибку из-за ошибки/предупреждения компилятора и, таким образом, освобождается от трудоемкого поиска ошибки.

Таким образом, следующая строка будет допустимой, хотя она не будет отображать предполагаемое поведение (в большинстве случаев):

if ( $var = null ) { echo 'test'; }

Хотя здесь отображается ошибка:

if ( null = $var ) { echo 'test'; }

Однако основным недостатком является потеря удобочитаемости с этим стилем. Но это зависит от читателя кода и некоторых других рекомендаций по стилю кодирования.

person Sirko    schedule 13.06.2012

Это условие йоды, я не знаю о каких-либо преимуществах, кроме того, что вы не можете присвоить значение переменной, когда вы случайно пишете, например

if( $foo = "bar" )


Вот ссылка на дополнительные примеры:

http://united-coders.com/christian-harms/what-are-yoda-conditions

person Nurickan    schedule 13.06.2012

В этом случае сравнение учитывает значение и тип значения. это строгое сравнение.

Например, этот код:

if (null == "") {
  echo "null";
}

Будет печатать «null», поскольку PHP обрабатывает «», 0, null, false как эквивалентные пустые значения, если только для сравнения фактического значения и типа самого значения не используется строгое сравнение.

Во-вторых, почему используется null === $class, потому что вы не можете присвоить значение null. В то время как вы можете успешно ошибиться и присвоить $class = null.

person ioseb    schedule 13.06.2012
comment
вопрос в порядке элементов (null перед $value и не $value перед null), а не в количестве знаков равенства (строгое сравнение) - person mishu; 13.06.2012
comment
@mishu писал эту часть, мое обновление и ваш комментарий появились одновременно ;) - person ioseb; 13.06.2012
comment
хорошо, теперь я вижу обновление - person mishu; 13.06.2012