2008-09-29 11 views
120

Parece que no hay un patrón real en la forma en que se nombran las funciones, str_replace, strrpos, strip_tags, stripslashes son solo algunas.¿Por qué las funciones integradas en PHP tienen un nombre tan aleatorio?

¿Por qué es este el caso?

EDITAR - esto no fue una publicación tipo "troll" - ¡algo que pienso cada vez que uso el idioma!

+12

No estoy de acuerdo con los que votaron en contra. Es una pregunta legítima. Y las respuestas que aquí se presentan pueden ayudar mucho a los desarrolladores pobres a tolerar la rareza de los nombres en PHP. –

+2

Los votos atrasados ​​son un poco duros - la convención de nomenclatura irregular y el reordenamiento de argumentos me han hecho tropezar más de una vez – ConroyP

+1

Hay un cierto segmento de desarrolladores de PHP que se enojan cada vez que alguien cuestiona 'su' idioma. Rechazan cualquier pregunta que expone defectos en PHP. – iconoclast

Respuesta

84

El lenguaje PHP ha crecido de forma algo orgánica, por lo que el nombre de las funciones es desordenado en algunas partes. Muchos de los diferentes formatos se conservan por razones de compatibilidad con versiones anteriores.

Una pequeña digresión, pero además de los problemas con el nombramiento de funciones, otro desafortunado efecto colateral del crecimiento orgánico del lenguaje es una aparente inconsistencia en el orden de los argumentos, p. considerar las funciones in_array y strstr:

bool in_array (mixed $needle, array $haystack [, bool $strict]) 

string strstr (string $haystack, mixed $needle [, bool $before_needle=false]) 

Curiosamente, PHP parece ser internamente consistentes con estos ordenamientos en que todas las funciones de cadena parecen utilizar $haystack, $needle mientras que las funciones de matriz son al revés, pero esto puede tomar un poco de acostumbrarse a alguien nuevo en PHP. Hay un buen post on ExpressionEngine hablando de este particular capricho en más detalle, así como un discussion on the PHP bugs list.

Como la lengua madura, hay varios intentos de implementar una convención de nomenclatura más rígido y consistente - de la Zend Framework Documentation:

Los nombres de funciones deben empezar siempre con una letra minúscula. Cuando el nombre de una función consiste en más de una palabra, la primera letra de cada nueva palabra debe estar en mayúscula. Esto se conoce comúnmente como formateo "camelCase".

filterinput()

getElementById()

Para una toma ligeramente diferente, desde 20 possible reasons why PHP function names and parameters are weird:

  • pegamentos PHP APIs y los seres humanos juntos, y a veces esto se complica

  • Las funciones PHP se han desarrollado bajo muchas circunstancias, som etimes borracho

  • función de PHP algoritmo de nombrar sigue siendo un secreto y no puede ser violada

  • PHP optó por dar a la gente algo divertido para quejarse/blog/reírse de

  • PHP tiene otros problemas que resolver

+12

"Las funciones PHP se han desarrollado bajo muchas circunstancias, a veces borrachas". mysql_real_escare_string puede ser un buen ejemplo. WTF !? – ciscocert

+2

Solo lo pensé, pero ¿cómo podría PHP crecer * inorgánico * cuando lo crean criaturas orgánicas? xD –

+0

@ciscocert: parte de la razón es que, al no tener espacios de nombres en ese momento, la práctica era agregar el prefijo 'mysql' a los nombres de las funciones. –

1

Para compatibilidad hacia atrás sobre una gran cantidad de lenguaje Revs

+2

¿No podemos simplemente definir un nuevo estándar dejando los estilos anteriores como alias de los nuevos? –

+0

Claro, podrían.Pero los costos probablemente superan los beneficios –

8

compatibilidad con versiones anteriores y la falta de espacios de nombres, junto con la rotación del lenguaje.

8

Porque el lenguaje ha crecido en los últimos 14 años desde 'Personal Home Page' a uno de los lenguajes de implementación de sitios web más populares. Nadie planeó para todas estas funciones; se agregaron uno a la vez según fuera necesario.

+1

Si * cualquier * pensamiento se hubiera dado a la consistencia al principio, no habría sucedido. No hay nada sobre el crecimiento durante 14 años que fuerce tal descuido. – iconoclast

0

Esto parece un poco troll-y. Sin embargo, es por compatibilidad con versiones anteriores.

PHP6 abordará la ayuda para abordar estos problemas, así como para brindar soporte completo UTF-8.

0

PHP es un lenguaje de script de código abierto "antiguo", de rápido crecimiento. La denominación es solo una cuestión de la larga historia ... No hay una compañía "académica" detrás de PHP como SUN detrás de Java, que controla la denominación ...

+0

Eso no es completamente cierto. Zend ha sido uno de los principales contribuidores a las compilaciones recientes de PHP y desde PHP 4 se ha desarrollado en Zend Engine. De hecho, Zend fue iniciado por los desarrolladores que reescribieron PHP 3. – Wilco

23

Históricamente, muchas de las funciones son mapas directos de sus contrapartes C , por lo que gran parte de la rareza de denominación y ordenamiento de argumentos en PHP se debe a eso.

Los contribuyentes a PHP generalmente han contribuido al lenguaje para satisfacer sus propias necesidades, por lo que el lenguaje ha crecido de manera orgánica y, a veces, poco disciplinado. Su popularidad también ha significado que se ha esforzado por mantener la compatibilidad con versiones anteriores a lo largo de su ciclo de vida, lo que significa que las malas decisiones sobre el idioma siguen vigentes incluso después de su desaprobación.

5

La respuesta es Evolution o Unintelligent Design. No estoy seguro de cuál;)

0

Inicialmente, PHP era solo un lenguaje de scripting sin soporte orientado a objetos (PHP 3) así que los nombres de funciones utilizados en PHP hasta la versión 3 y 4 están principalmente inspirados en la sintaxis PERL. Pero PHP 5 tiene muchas características OO como Reflection, tipo de alusión, interfaz, modificadores de acceso y lista continúa. La mayoría de estas nuevas características están inspiradas en JAVA. Por ejemplo; la implementación de la interfaz y la clase de herencia son las mismas en PHP y JAVA. Por lo tanto, la mayoría de las nuevas funciones con sus convenios y estilos de nombres están basadas en JAVA. Puede llamarse evolución de PHP de un mero lenguaje de scripting a un lenguaje OO algo robusto.

0

Realmente no veo cómo importa. La sintaxis es sintaxis Hay muchos idiomas humanos, inglés para uno, donde no sigue ningún patrón específico pero lo aprendemos independientemente. Se trata de conocer tu sintaxis en lugar de adivinar.

Cuestiones relacionadas