Возможный дубликат:
Почему некоторые опытные программисты пишут выражения таким образом?
Мне просто интересно: в большинстве проектов 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) {
Это просто предпочтение, которое некоторые люди считают более ясным.