Есть ли преимущество использования null сначала в PHP?

Возможный дубликат:
Почему некоторые опытные программисты пишут выражения таким образом?

Мне просто интересно: в большинстве проектов frameworks / opensource, которые я изучил, я часто видел такой код …

<?php if (null === self::$_instance) { self::$_instance = new self(); } 

В частности, эта строка …

 if (null === self::$_instance) { 

Зачем использовать null в первом аргументе инструкции if вместо другого? …

 if (self::$_instance === null) { 

Я понимаю, что, вероятно, нет увеличения производительности или что-то в этом роде. Это просто предпочтение или это какой-то стандарт кодирования, который я забыл?

Это предотвращает случайное присвоение значения переменной, особенно когда используется только свободное сравнение типов ( == ):

 if (self::$_instance = NULL) { … } // WHOOPS!, self::$_instance is now NULL 

Этот стиль условий часто называют условиями йоды . Производительность разумна, нет никакой разницы, оба утверждения эквивалентны.

Это в основном для предотвращения случайного назначения:

 if (self::$_instance = null) ... //oops! 

Нет существенной разницы в производительности. Обычным преимуществом написания выражений таким образом является защитное программирование. Мы хотим избежать случайного использования задания вместо сравнения равенства:

 if (self::$_instance = null) { ... 

Woops!

Это поможет вам правильно получить код.

Если вы это сделаете, ваш код будет работать, но эффект будет далеко от того, что вы хотите:

 if (self::$instance = null) { 

Условие всегда будет терпеть неудачу (потому что оператор = возвращает значение, и оно ложно), но self::$instance теперь будет иметь значение null . Это не то, что вы хотите.

Если вы это сделаете:

 if (null = self::$instance) { 

ваш код не сможет работать, потому что вы не можете использовать null (или любой литерал, такой как строка или целое число) в левой части задания. Только переменные могут быть левыми для оператора = .

Поэтому, если вы ошибаетесь в качестве == as = , вы получаете ошибку синтаксического анализа, и ваш код полностью не работает. Это предпочтительнее загадочной и труднодоступной ошибки.

Это не относится к null – я видел, что многие кодеры предпочитают писать свои выражения таким образом:

 if(8 == 4 * 2) { 

Это просто предпочтение, которое некоторые люди считают более ясным.