Прописные логические и строчные буквы в PHP - PullRequest
121 голосов
/ 06 января 2010

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

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

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

edit: Забыл упомянуть, что это относится и к NULL и null.

Ответы [ 10 ]

103 голосов
/ 27 сентября 2010
define('TRUE', false);
define('FALSE', true);

Счастливая отладка! (PHP <<a href="http://www.php.net/ChangeLog-5.php#5.1.3" rel="noreferrer"> 5.1.3 (2 мая 2006 г.) , см. Демонстрация )

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


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

фиксирует d51599dfcd3282049c7a91809bb83f665af23b69 6f76b17079a709415195a7c27607cd52d039d7c3 )

80 голосов
/ 06 января 2010

Официальное руководство по PHP 1002 * гласит:

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

Так что да, true === TRUE и false === FALSE.

Лично я предпочитаю TRUE над true и FALSE над false по соображениям удобочитаемости. По той же причине я предпочитаю использовать OR над or или || и при использовании AND над and или &&.

Стандарт PSR-2 требует, чтобы true, false и null были в нижнем регистре.

29 голосов
/ 10 июня 2010

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

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

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

Раздел 2.5 PSR-2:

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

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

9 голосов
/ 26 января 2015

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

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

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

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

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

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

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

5 голосов
/ 12 марта 2013

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

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

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

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

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

5 голосов
/ 06 января 2010

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

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

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

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

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

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

4 голосов
/ 06 января 2010

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

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

2 голосов
/ 17 января 2012

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

0 голосов
/ 14 июля 2014

Вот мой ТЕСТ на 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 раз. Так что прописные буквы быстрее в моей среде.

...