Есть ли какая-то польза от использования null first в PHP? - PullRequest
12 голосов
/ 31 августа 2011

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

Я простоЛюбопытно по этому поводу: в большинстве фреймворков / проектов с открытым исходным кодом, которые я изучал, я часто видел такой код ...

<?php

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

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

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

Зачем использоватьnull в первом аргументе оператора if, а не наоборот? ...

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

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

Ответы [ 5 ]

14 голосов
/ 31 августа 2011

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

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

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

6 голосов
/ 31 августа 2011

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

if (self::$_instance = null) ... //oops!
4 голосов
/ 31 августа 2011

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

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

Woops!

3 голосов
/ 31 августа 2011

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

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

if (self::$instance = null) {

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

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

if (null = self::$instance) {

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

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

0 голосов
/ 31 августа 2011

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

if(8 == 4 * 2) {

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...