¿Por qué las funciones y los métodos en PHP no distinguen entre mayúsculas y minúsculas?

107

Las funciones y los métodos de PHP no distinguen entre mayúsculas y minúsculas, como se ilustra en el siguiente ejemplo.

function ag()
{
    echo '2';
}

Ag();
class test {
    function clMe()
    {
        echo 'hi';
    }
}

$instance = new test;
$instance->clme();

Pero ese no es el caso con las variables. ¿Cuál es la razón fundamental?

user198729
fuente
161
¡PHP no necesita ninguna justificación apestosa!
Max Shawabkeh
2
"Porque el hombre de la sopa lo dice". Sin justificación, pero referencias: php.net/manual/en/functions.user-defined.php (entre los ejemplos 3 y 4), php.net/manual/en/language.variables.basics.php
outis
2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");Es posible que se sorprenda al ver dos llamadas a la función compartir ($ str). primero debido a c'tor y segundo llamado explícito por las mismas razones !!
vivek.m
1
@outis, ¿qué quieres decir con "hombre de sopa"?
Pacerier
1
@outis, te refieres a la "sopa nazi" de Seinfeld. YouTube , Wikipedia
Kevin Traas

Respuestas:

98

Permítanme citar de la entrevista: el creador de PHP, Rasmus Lerdorf

La primera versión de PHP fue un conjunto simple de herramientas que armé para mi sitio web y para un par de proyectos. Una herramienta hizo un registro de éxito elegante en una base de datos mSQL, otra actuó como un intérprete de datos de formulario. Terminé con unos 30 pequeños programas CGI diferentes escritos en C antes de cansarme y los combiné todos en una sola biblioteca C. Luego escribí un analizador muy simple que seleccionaría etiquetas de archivos HTML y las reemplazaría con la salida de las funciones correspondientes en la biblioteca C.

El analizador simple creció lentamente para incluir etiquetas condicionales, luego etiquetas de bucle, funciones, etc. En ningún momento pensé que estaba escribiendo un lenguaje de secuencias de comandos. Simplemente estaba agregando un poco de funcionalidad al analizador de reemplazo de macros. Todavía estaba escribiendo toda mi lógica empresarial real en C.

He leído en alguna parte que, dado que todas las funciones introducidas se sentían esencialmente como etiquetas en un documento HTML y dado que las etiquetas HTML no distinguen entre mayúsculas y minúsculas, eligió los nombres de las funciones en PHP para que no distinga entre mayúsculas y minúsculas. Posteriormente, esta característica se mantuvo en el idioma.

Shailesh Kumar
fuente
66
También recuerdo una cita de Rasmus en una conferencia de PHP en París que decía más o menos: "Definitivamente no soy un buen programador, en términos de seguir reglas o estándares de codificación estrictos, pero puedo decir que si confías en la sensibilidad de mayúsculas y minúsculas a reconoce un nombre de función de otro, ¡estás en un problema serio! "
Tom Desp
1
¿Todavía no distingue entre mayúsculas y minúsculas en el futuro?
Vee
4
Entonces, es por eso que los programadores de php usan guiones bajos en lugar de camelcase al nombrar sus funciones.
paperstreet7
2
@ paperstreet7 Algunos lo hacen. Los buenos no lo hacen. Al menos ya no.
Dan
13
@dan, muchos programadores "buenos" usan guiones bajos. De hecho, el PSR-0 no hace ninguna recomendación a propósito. Un buen programador elige guiones bajos o camelcase y se adhiere a esa convención. Hacer que esa elección sea la medida de si alguien es un buen programador es bastante tonto.
jdp
34

Sí, los nombres de las funciones y los métodos no distinguen entre mayúsculas y minúsculas.

Y sí, los nombres de las variables distinguen entre mayúsculas y minúsculas.

No estoy seguro de que haya una razón para eso, excepto que ha sido así durante mucho tiempo y, por lo tanto, sigue siendo el caso, por razones de compatibilidad con versiones anteriores.



Como referencia, un par de enlaces / citas a varias páginas del manual:

Para funciones ( citando ) :

Nota: Los nombres de las funciones no distinguen entre mayúsculas y minúsculas, aunque suele ser una buena forma de llamar a funciones tal como aparecen en su declaración.

Y los métodos no son mucho más que funciones en objetos, especialmente cuando pensamos en PHP 4 y la compatibilidad con versiones anteriores.


Y, para variables ( citando ):

Las variables en PHP están representadas por un signo de dólar seguido del nombre de la variable. El nombre de la variable distingue entre mayúsculas y minúsculas.

Y las propiedades de los objetos no son mucho más que variables en los objetos: el mismo comentario sobre PHP 4 y la compatibilidad con versiones anteriores.

Pascal MARTIN
fuente