Booleanos mayúsculas vs. minúsculas en PHP

135

Cuando estaba aprendiendo PHP, leí en alguna parte que siempre debes usar las versiones en mayúsculas de booleanos TRUEy FALSE, debido a que las versiones en minúsculas "normales", truey false, no eran "seguras" de usar.

Han pasado muchos años, y cada script PHP que he escrito usa la versión en mayúsculas. Ahora, sin embargo, estoy cuestionando eso, ya que he visto un montón de PHP escrito con la versión en minúsculas (es decir, Zend Framework).

¿Alguna vez hubo alguna razón para usar la versión en mayúscula, o está perfectamente bien usar la minúscula?

editar: Olvidé mencionar que esto se aplica a NULLy nulltambién.

Austin Hyde
fuente
44
Hay varios sitios que dicen que escribirlo en minúsculas supuestamente es "mucho más rápido", pero sin citar ninguna fuente seria. Interesado en ver si surge algo.
Pekka
2
Eso no es cierto. Lo probé con iteraciones de 5M y ambos dieron los mismos resultados, 0.5s en mi PC: P
Alex
9
@Alex Pekka también puede significar que la escritura real de booleanos en minúsculas es más rápida. Eso tiene sentido, tener que usar menos teclas. Sin embargo, la diferencia es pequeña.
Martti Laine
Lo siento, accidentalmente voté hacia abajo después de que voté por ti.
SIFE
1
Una observación interesante: var_export () escribe verdadero y falso como minúscula, pero NULL como mayúscula. Encantador, ¿eh? 3v4l.org/6Oelk
donquixote

Respuestas:

89

El manual oficial de PHP dice:

Para especificar un literal booleano, use las palabras clave VERDADERO o FALSO. Ambos son insensibles a mayúsculas y minúsculas.

Entonces sí, true === TRUEy false === FALSE.

Personalmente, sin embargo, prefiero TRUEuna truey FALSEotra vez falsepor razones de legibilidad. Es la misma razón por la que prefiero usar ORover oro ||, y usar ANDover ando &&.

El estándar PSR-2 requiere true, falsey nullestar en minúsculas.

Lukman
fuente
81
Solo quiero señalar eso ORy ||son diferentes operadores en PHP (ya que tienen una precedencia diferente), como son ANDy &&. (Así, por ejemplo &&y ||son más altos precedencia que los operadores de asignación, pero ORy ANDno lo son.)
Johrn
21
Además, con los IDE de hoy no veo la razón para tener un booleano puro en mayúsculas como el resaltador de sintaxis para la mayoría de los IDE los separa con gran distinción.
RobertPitt
37
Prefiero escribirlos en minúsculas para no tener que mantener presionada la tecla Mayús.
ack
66
También me gustan las minúsculas, como en Java, pero a cada una la suya. ¡Sin embargo, desearía que se decidieran de UNA manera y nos hicieran cambiar a uno u otro! ¡Esta no es una flexibilidad que realmente necesito tener!
Ray
55
@Cyril: Hay muchas buenas razones para permitirse odiar PHP (por ejemplo, solo vea lo que Johrn mencionó anteriormente, no lo sabía), pero dado que básicamente no distingue entre mayúsculas y minúsculas, no hay nada extraño en mayúsculas y minúsculas Las expresiones son las mismas. Lo que es absurdo, sin embargo, que se mezcla de mayúsculas y minúsculas y mayúsculas y minúsculas con la insensibilidad general. (Ver, por ejemplo: stackoverflow.com/questions/5643496/… )
Sz.
110
define('TRUE', false);
define('FALSE', true);

¡Feliz depuración! (PHP < 5.1.3 (2 de mayo de 2006) , ver demostración )

Editar: las mayúsculas son constantes y las minúsculas son valores. Usted está interesado en el valor, no en la constante, que puede cambiar fácilmente.


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

Commits d51599dfcd3282049c7a91809bb83f665af23b69 (y 6f76b17079a709415195a7c27607cd52d039d7c3 )

Radu
fuente
77
-1 porque A) esto no tiene sentido. B) esto no responde la pregunta. y C) ya he aceptado la respuesta correcta, y esto no presenta ninguna información útil adicional.
Austin Hyde
36
Entonces permítanme explicar en detalle: las mayúsculas son constantes y las minúsculas son valores. Usted está interesado en el valor, no en la constante, que puede cambiar fácilmente. Entonces, si hubiera pensado un poco en el texto y no se hubiera apresurado a imponer una penalización, probablemente lo habría entendido.
Radu
13
Entiendo el punto que está haciendo (ahora), pero la forma en que lo hizo originalmente fue (IMO) críptico e inútil. Si originalmente hubiera hecho la edición de la respuesta, hubiera votado positivamente, ya que este es un muy buen punto, en realidad.
Austin Hyde
44
Esta es la respuesta correcta. Debería haber obtenido los puntos para esto.
serialworm
22
En cuanto a la edición, esa descripción es un poco engañoso ... Los mismos valores reales (que se compilan abajo en fichas T_NULL, T_TRUEy T_FALSEen tiempo de análisis), son entre mayúsculas y minúsculas, por lo que el uso NULLno es en realidad una "constante" --- a menos que lo conviertas en una constante, usando define(). Simplemente usando NULLo TRUEno significa que es una constante, como si no hubiera tal constante, PHP lo interpreta como el literal. Una descripción más precisa es que las versiones en minúsculas no se pueden redefinir, mientras que cualquier otra variación de caso sí se puede .
Joe
31

Use minúsculas.

  1. Es más fácil escribir. (OMI)
  2. Es más fácil de leer. (OMI)
  3. Los booleanos de JavaScript son minúsculas y distinguen entre mayúsculas y minúsculas.
Bo Allen
fuente
66
+1; Estaba a punto de agregar el argumento Javascript: como es MUY común en la programación web escribir código PHP y JS, los músculos de los dedos de desarrollo web bien desarrollados continúan aplicando rutinariamente el mismo caso de letras utilizado en el último contexto de lenguaje. Al menos a menudo me encontraba escribiendo VERDADERO o FALSO en Javascript después de cambiar de PHP. El uso de minúsculas en PHP solucionó este para siempre.
Sz.
11

Si tiene la intención de utilizar JSON, RFC7159 dice:

Los nombres literales DEBEN estar en minúsculas. No se permiten otros nombres literales.

De la lista de cambios incompatibles con versiones anteriores en PHP 5.6 :

json_decode () ahora rechaza las variantes no minúsculas de los literales JSON verdadero, falso y nulo en todo momento, según la especificación JSON

De acuerdo a estándar PSR-2 :

Las palabras clave PHP DEBEN estar en minúsculas.

Las constantes PHP verdadero, falso y nulo DEBEN estar en minúsculas.

Mandrágora
fuente
Correcto, pero esta pregunta fue específicamente con respecto a los booleanos en mayúsculas / minúsculas en PHP , no en JSON. Por ejemplo, ambos json_encode(TRUE)y json_encode(true)rendimiento 'true'.
Austin Hyde
3
Perdón por mencionar a JSON, ¿sería mejor si eliminara todas esas referencias y solo mencionara PSR-2?
Mandrake
44
Creo que la referencia a JSON es adecuada, ya que con frecuencia usa javascript / JSON con PHP, y puede estar buscando coherencia.
Doug Kress
9

Solía ​​hacer booleanos de estilo C VERDADERO / FALSO como todos los concursos, en mayúsculas, hasta que llegué al PSR carro de .

Sección 2.5 de PSR-2:

Las constantes PHP verdadero, falso y nulo DEBEN estar en minúsculas.

Básicamente, si quieres jugar bien con detalles de estilo de código abierto, los booleanos deben ser minúsculas.

Todd
fuente
5

No importa, truees exactamente lo mismo que TRUE. Lo mismo vale para falseynull . No he escuchado que hubiera importado en ningún momento.

La única forma de desordenar las cosas es citando esos valores, por ejemplo:

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

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

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

Lo único que puede restringirlo o alentarlo a usar mayúsculas o minúsculas puede ser su empresa o sus propias pautas de codificación. Aparte de eso, eres libre de usar cualquiera de los dos y no dará lugar a ningún problema.

Tatu Ulmanen
fuente
FALSE y NULL no son lo mismo. is_null () no devuelve verdadero si el valor === FALSO.
Noah Goodrich el
9
@Noah Goodrich, en ningún momento implicaba eso falsey nullsería lo mismo. Dije que "lo mismo vale para falsey null", lo que significa que ambos pueden expresarse en letras minúsculas o mayúsculas.
Tatu Ulmanen
5

He escrito un código simple para verificar las diferencias entre falso y FALSO : cada iteración estaba haciendo algo que:

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

Aquí están los resultados:

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

Por lo tanto, podemos ver que el rendimiento se ve ligeramente afectado por el caso booleanos: las minúsculas son más rápidas. Pero ciertamente no lo verás.

Arkadij Kuzhel
fuente
¿Qué motor JS? Hoy en día JS se compila en la memoria antes de la ejecución.
Tiberiu-Ionuț Stan
1
PHP está tokenizado antes de la ejecución, y no debería haber diferencia en el tiempo. Otra respuesta indicó que el superior era más rápido. Deben ignorarse las diferencias de esta magnitud en cualquier prueba; esta diferencia es 2.5e-7 por iteración.
Doug Kress
4

Personalmente, siempre he usado la forma en minúscula, pero por ninguna razón en particular que no sea para hacer que mi código se vea ordenado, el único lugar donde uso letras mayúsculas es cuando los nombres de las clases y los nombres de variables de la carcasa de camello.

Sin embargo, una de las ventajas de usar mayúsculas es que destacan y son fáciles de encontrar en el código.

RMcLeod
fuente
2
+1 para ordenar. Toda la tradición de mayúsculas proviene de C, pero ya es hora de que eliminemos esa forma fea.
Petruza
2

Encontré esta vieja pregunta mientras me preguntaba lo mismo. Buen punto con define ('VERDADERO', falso); define ('FALSO', verdadero); Sin embargo, no se aplica a php5. Escribir esas líneas en un código php5 es como escribir un comentario.

Conrad
fuente
66
Solo para referencia futura, publicó esto como una "respuesta". En StackOverflow, a diferencia de los foros tradicionales, las publicaciones conversacionales que en realidad no sirven como solución a la pregunta y no proporcionan información útil deben publicarse como un comentario a la pregunta original o la respuesta relevante. En este caso, su publicación sería más adecuada para un comentario sobre mi pregunta que una respuesta.
Austin Hyde
8
en realidad es útil saber que esto ya no funciona en PHP 5: P
Alex
1

Aquí está mi PRUEBA en 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;

Esta vez FALSO ganó 20 veces. Entonces mayúsculas es más rápido en mi entorno.

Abbas Uddin
fuente