Una de las cosas chidas que aprendí de jQuery es la forma en que maneja los argumentos, de forma casi predictiva. A lo que me refiero es la manera en que permite que los argumentos de la derecha se puedan emplear hacía la izquierda y así sucesivamente.
jQuery.post( url, [data,] [success(data, textStatus, jqXHR),] [dataType] )
jQuery.post('url.php', { foo: bar }, function(){}, 'json'); jQuery.post('url.php', function(){}, 'json');
O algo así, la onda es que me late hacer lo mismo con PHP.
function foo($bar = '', $candy = 0, $does = array(), $nothing = NULL, $else = FALSE) { if (is_integer($bar)) { $candy = $bar; $bar = ''; } if (is_array($candy)) { $does = $candy; $candy = 0; } if (is_callable($does)) { $nothing = $does; $does = array(); } if (is_bool($nothing)) { $else = $nothing; $nothing = NULL; } }
Aquí la clave está en conocer bien el tipo de argumentos que necesita nuestra función, y en base a ello omitir o redefinir los argumentos. En el ejemplo se hace de forma muy abusiva, confusa y complicada.
Si una función espera mas de 4 argumentos entonces lo que yo hago es agrupar las opciones mas triviales y restantes en un solo último argumento a modo de arreglo asociativo. Así los primeros tres argumentos -los mas relevantes- son mas fáciles de comparar predictivamente, suponiendo que alguno de ellos es igualmente un arreglo asociativo para combinarlo con las últimas opciones.
function request($url, $method = 'GET', array $params = array()) { static $defaults = array( 'url' => '', 'vars' => array(), 'method' => 'GET', 'headers' => array(), 'status' => 200, 'timeout' => 30, 'callback' => 'print', ); if (is_array($url)) { $params += $url; } if (is_array($method)) { $params += $method; } $params = array_merge($defaults, $params); extract($params); }
Aquí hay otro tip: el type-hinting de php es realmente útil en estos casos, neta. Esto cambia radicalmente nuestra forma de emplear una función, método o como se llame.
Así mismo la idea es trabajar directamente con la variable de opciones, o bien, usar extract()
para abreviar.
Yo le llamo patrón de predicción.
No hay comentarios:
Publicar un comentario