Прописные логические и строчные буквы в PHP

Когда я изучал PHP, я где-то читал, что вы всегда должны использовать булевы версии в верхнем регистре, TRUE а также FALSE, потому что "нормальные" строчные версии, true а также falseне были "безопасны" для использования.

Прошло уже много лет, и каждый написанный мной PHP-скрипт использует заглавную версию. Теперь, однако, я подвергаю сомнению это, поскольку я видел много PHP, написанного в строчной версии (то есть Zend Framework).

Была ли когда-нибудь причина использовать заглавную версию или вполне нормально использовать строчную?

редактировать: забыл упомянуть, что это относится к NULL а также null также.

10 ответов

Решение

The official PHP manual says:

Чтобы указать логический литерал, используйте ключевые слова ИСТИНА или ЛОЖЬ. Оба регистрозависимы.

So yeah, true === TRUE а также false === FALSE,

Personally, however, I prefer TRUE над true а также FALSE над false для удобства чтения. It's the same reason for my preference on using OR над or или же ||, and on using AND над and или же &&,

The PSR-2 standard requires true, false а также null to be in lower case.

define('TRUE', false);
define('FALSE', true);

Удачной отладки! (PHP < 5.1.3 (2 мая 2006 г.), см. Демонстрацию)

Редактировать: заглавные буквы являются константами, а строчные - значениями. Вы заинтересованы в значении, а не в константе, которая может легко измениться.


Eliminated run-time constant fetching for TRUE, FALSE and NULL

author      dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
committer   dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
commit      d51599dfcd3282049c7a91809bb83f665af23b69
tree        05b23b2f97cf59422ff71cc6a093e174dbdecbd3
parent      a623645b6fd66c14f401bb2c9e4a302d767800fd

http://git.php.net/?p=php-src.git;a=commit;h=d51599dfcd3282049c7a91809bb83f665af23b69http://git.php.net/?p=php-src.git;a=commit;h=6f76b17079a709415195a7c27607cd52d039d7c3)

Используйте строчные буквы

  1. Проще набрать. (ИМО)
  2. Это легче читать. (ИМО)
  3. JavaScript-логические значения строчные и чувствительны к регистру.

Если вы собираетесь использовать JSON, тогда RFC7159 говорит:

Дословные имена ДОЛЖНЫ быть строчными. Другие буквальные имена не допускаются.

Из списка обратных несовместимых изменений в PHP 5.6:

json_decode () теперь отклоняет нестрочные варианты литералов JSON true, false и null в любое время, согласно спецификации JSON

Согласно стандарту PSR-2:

Ключевые слова PHP ДОЛЖНЫ быть в нижнем регистре.

Константы PHP true, false и null ДОЛЖНЫ быть в нижнем регистре.

Раньше я делал булевы TRUE/FALSE в стиле C, как и все conts, во всех заглавных буквах, пока не попал в фургон PSR.

Раздел 2.5 ПСР-2:

Константы PHP true, false и null ДОЛЖНЫ быть в нижнем регистре.

В общем, если вы хотите хорошо играть с деталями стиля с открытым исходным кодом, то логические значения должны быть в нижнем регистре.

Это не имеет значения, true точно так же, как TRUE, То же самое касается false а также null, Я не слышал, чтобы это имело значение в любой момент.

Единственный способ, которым вы можете все испортить, это заключить в кавычки эти значения, например:

$foo = false;   // FALSE
$bar = "false"; // TRUE

$foo2 = true;   // TRUE
$bar2 = "true"; // TRUE

$foo3 = null;   // NULL
$bar3 = "null"; // TRUE

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

Я написал простой код для проверки различий между false и FALSE: каждая итерация выполняла что-то, что:

    for ($i = 0; $i < self::ITERATIONS; ++$i) {
       (0 == FALSE) ;
    }

Вот результаты:

Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec

Таким образом, мы можем видеть, что логический регистр очень незначительно влияет на производительность - строчные буквы быстрее. Но, конечно, вы не увидите.

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

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

Я наткнулся на этот старый вопрос, задавая себе то же самое. Хорошая точка с define('TRUE', false);define('FALSE', true); Не относится к php5, хотя. Написание этих строк в коде php5 похоже на написание комментария.

Вот мой ТЕСТ на Windows 7x64bit Apache/2.4.9 PHP/5.5.14

$blockLimit = 50;
while($blockLimit > 0): $blockLimit--;

//STAR Here ================================================

$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (FALSE);
}
echo 'FALSE took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";
$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (false);
}
echo 'false took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";

echo "\r\n --- \r\n";
//Shutdown ==================================================
endwhile;

На этот раз FALSE выиграл 20 раз. Так что заглавные буквы быстрее в моей среде.

Я на много лет опоздал на вечеринку, но хотел упомянуть кое-что интересное, чего еще нет в теме. Сегодня я обнаружил True также действительно, а не только true или же TRUE. Все варианты написания эквивалентны. Это актуально, потому что генератор Open API для PHP использует True. (Что привело меня к недоумению и поиску, который нашел эту страницу).

Другие вопросы по тегам