Mal diseño de las funciones de arrays en PHP

Como todo lenguaje de programación, PHP tiene sus ventajas y sus inconvenientes. Así mismo, hay cosas que han sido muy bien diseñadas, y otras que dejan que desear…

Hay una cosa de PHP en la que seguramente la gente no repara, pero creo que seguramente cause más de una metedura de pata por ahí. Al menos, a mi sí me la causa, y creo conocer el porqué del problema.

Pregunta para los programadores que usan PHP:

¿No os pasa que al usar las funciones de los arrays, hay veces que no sabeis donde pasar el array como argumento?

Por ejemplo, sin mirar la documentación, cuales de las siguientes 6 sentencias son correctas?

  1. array_push ($valor, $array); // poner $valor en el $array
  2. array_push ($array, $valor); // poner en el $array el $valor
  3. array_search ($valor, $array); // buscar el $valor en el $array
  4. array_search ($array, $valor); // buscar en el $array el $valor
  5. array_key_exists ($array, $valor); // existe en el $array el $valor ?
  6. array_key_exists ($valor, $array); // existe el $valor en el $array ?

Bueno, si lo pensais un poco, por lógica…. yo soy incapaz de sacarlo, de verdad. A veces acierto y a veces meto la pata (sobretodo cuando paso semanas sin tocar PHP), al final he llegado a la conclusión que no es un problema mio, que es un problema de diseño de las clases.

Si las funciones que trabajan con arrays (o con cualquier otra cosa) tomaran como primer argumento el objeto sobre el cual se opera (en este caso el array), sería trivial responder a la pregunta anterior, en tal caso las correctas serían la 2, la 4 y la 5. Todas las que tienen como primer parámetro el $array.

Sin embargo esto no es así en la práctica. Las respuestas correctas son la 2, la 4 y la 6.

Por ejemplo, array_slice y array_shift tienen también como primer parámetro el array, al igual que array_push, mientras que in_array lo tiene como segundo argumento.

Parece que queda claro que se diseñó para que las funciones que implican “preguntas” cojan el array como segundo argumento (existe el elemento X en el $array?), sin embargo si el objeto apareciera siempre como primer argumento, la gente metería menos la pata.

Está claro que esto no va a cambiar en PHP (dios no lo quiera, la de webs que dejarian de funcionar), pero si estás leyendo esto, y en un momento dado vas a diseñar algo, por favor, que tenga la consistencia más sencilla posible, que se pueda recordar inconscientemente, sin tener que darse cuenta de este tipo de reglas ;)

<b>Actualización:</b> Las funciones de strings diría que son 1000 veces peores, y eso sin hablar del soporte para cadenas multi-idioma (aka, UTF-8, por ejemplo).

Trackback URL

2 Comments on "Mal diseño de las funciones de arrays en PHP"

Hi Stranger, leave a comment:

ALLOWED XHTML TAGS:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe to Comments