2010-11-21 8 views

Respuesta

9

Siempre lo último - lo mismo se aplica a echo, print y otras construcciones de lenguaje, también. ¡Nunca agregue paréntesis adicionales después de construcciones de lenguaje!

La razón es simple: el uso de paréntesis hace que creas que require es una función, ¡que no lo es! Por ejemplo:

if (require('file.php') == false) { 
    // do stuff 
} 

usted - y probablemente incluso la mayoría de los desarrolladores de PHP altos - diría que esto se compara el valor de retorno de la require. ¡Pero no es así! PHP interpreta esto como:

if (require (('file.php') == false)) { 
    // do stuff 
} 

que es:

if (require '') { 
    // do stuff 
} 

Si utiliza el paréntesis con el lenguaje construye usted podría así escribe:

require(((((((((((((((((((('file.php')))))))))))))))))))) 

¿O alguna vez escribir:

array(('hi')); 

Eso es lo mismo sin sentido.

+0

"Nunca use paréntesis con construcciones de lenguaje". ¿Entonces nunca usas 'array' o' exit' con un parámetro? Esto es realmente un problema de precedencia del operador, y bastante artificial en eso. No hay sugerencia en la pregunta. Verificación de un valor de retorno inexistente. Y si * do * escribe 'require ('file.php') == false', se obtiene un error fatal inmediato. Entonces no hay posibilidad de errores sutiles. –

+3

@Metthew: con 'array' los paréntesis son parte de la construcción. Con 'require' no lo son. No puedes omitirlos. – NikiC

+0

PHP acaba de romperse. – Gumbo

Cuestiones relacionadas