Contenido

Mejora tus plugins con parse_str

19 jun

+ 3

PHP como lenguaje de programación web, a mi juicio, es genial. Facil de aprender, potente (hay diversidad de opiniones), y sobretodo facil de encontrar información sobre él. Por ese motivo es el leguaje que más uso a la hora de desarrollar en casa (aunque si tuviera más tiempo aprendería otros).

Como todos los lenguajes de programación podemos definir funciones propias, aportando más funcionalidades a nuestras aplicaciones. El metodo de crear funciones es muy facil.


function nombre_funcion($argumentos ='') 
  

PHP al igual que otros lenguajes te permite definir un valor por defecto a los argumentos de la función, dando la posibilidad de poder usar la función sin necesidad de pasar parametros a la función. Asegurandonos que siempre va a recibir algún parametro.

La forma en que se pasan los parametros a la funciones puede variar dependiendo de las necesidades de cada una de ellas. Y para desarrollar, por ejemplo, plugins para WordPress que nos muestren datos por pantalla usar una u otra puede ser trivial para futuras modificaciones del código.

De hecho todas las funciones de wordpress 1.5 que mostraban datos por pantalla han sido reescritas para conseguir un mejor nivel de mantenimiento.

Voy a poner como ejemplo la función list_cats o wp_list_cats, que nos muestran la lista de categorías de nuestro blog. Las funciones realizan la misma función incluso vereis que una llama a la otra, solo que dependiendo del paso de parametros varía la llamada.

function list_cats [WordPress]

El código de la función es muy largo y poco util para lo que quiero explicar. Asi que con la llamada a la función bastará.

function list_cats($optionall = 1, $all = 'All', $sort_column = 'ID', $sort_order = 'asc', $file = '', $list = true, $optiondates = 0, $optioncount = 0, $hide_empty = 1, $use_desc_for_title = 1, $children=FALSE, $child_of=0, $categories=0, $recurse=0, $feed = '', $feed_image = '', $exclude = '', $hierarchical=FALSE) {...}

Como podeis ver se definen un montón de parametros que necesitamos rellenar para conseguir una lista de categorías. De esta manera nuestra llamada a la función quedaría asi:

<?php list_cats(FALSE, '', 'ID',
                'asc', '', TRUE, FALSE, 
                FALSE, FALSE, TRUE, 
                FALSE, FALSE, '', FALSE, 
                '', '', '1,33', 
                TRUE); ?>

Además de fea, es muy dificil de mantener.

function wp_list_cats [WordPress]

Esta función disponible en WordPress desde la versión 2.0+, intenta corregir el pequeño fallo de limitar los parametros de las funciones como la anterior.

function wp_list_cats($args = '')

Con este simple encabezado realiza la misma función que la anterior, sin necesidad de pasar tantos parametros, aunque realmente si que se estan pasando.

wp_list_cats('sort_column=name&optioncount=1&exclude=10, 15');

De esta forma pasamos los parametros mediante una línea de comandos, haciendo que interiormente realize el parseo y debido asignamiento de los mismos.

parse_str($args, $r);
if ( !isset($r['optionall']))
$r['optionall'] = 0;
  

El uso de la función parse_str propia de PHP, nos permite convertir una linea de comandos como la anterior en un array de parametros. De los cuales nos será mas facil controlar. Mediante el uso de isset podemos definir si un parametro esta siendo pasado o no, con el fin de recargarlo con un valor por defecto que en este caso de 0.

Ya con todos los parametros necesarios únicamente nos queda realizar algo con ellos, que en este caso se uasn para llamar a la funcion list_cats con los parametros necesarios.

return list_cats($r['optionall'], $r['all'], $r['sort_column'], $r['sort_order'], $r['file'],    $r['list'], $r['optiondates'], $r['optioncount'], $r['hide_empty'], $r['use_desc_for_title'], $r['children'], $r['child_of'], $r['categories'], $r['recurse'], $r['feed'], $r['feed_image'], $r['exclude'], $r['hierarchical']);
 

¿Por que usarlo?

Quizas parezca algo complicado y sin sentido, pero imaginar que en un futuro decidís cambiar el número de parametros de la función list_cats, ¿como lo haríais sin fastidiar a toda la gente que siga usando el formato antiguo? Además de ser muy util por que no hay un orden necesario a la hora de los parametros lo cual evita una gran cantidad de fallos a nivel usuario. 

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.