2012-07-31 12 views
6

¿Es posible escribir una plantilla de código de NetBeans para utilizando todos los argumentos declarados en la cabecera de una función (por ejemplo, para llamar a otra función con estas variables) ? El número de argumentos puede ser diferente, por lo que no parece ser fácil.NetBeans plantilla de código para el uso de todos los argumentos declarados en la cabecera de la función

Por ejemplo, a veces quiero imprimir todos los argumentos en una función para fines de depuración.


He aquí un ejemplo de uso (llamando dsm() de funciones múltiples veces, dependiendo del número de los argumentos):

function testModule_theme($existing, $type, $theme, $path) { 
    dsm($existing, '$existing in ' . __FUNCTION__ . '()'); 
    dsm($type, '$type in ' . __FUNCTION__ . '()'); 
    dsm($theme, '$theme in ' . __FUNCTION__ . '()'); 
    dsm($path, '$path in ' . __FUNCTION__ . '()'); 

    return array(
    // ...... 
); 
} 

Aquí hay otro:

function testModule_block_view($delta = '') { 
    dsm($delta, '$delta in ' . __FUNCTION__ . '()'); 
    $block = array(); 
    // ..... 
    return $block; 
} 

Como se puede ver, hay hay 4 argumentos en el primer caso y solo 1 en el segundo. El nombre de los argumentos también está cambiando dependiendo de la función dada.

Hay una plantilla de código ya he escrito para el uso de dsm() función:

ddsm code template

dsm($$${VARIABLE newVarName default="variables"}, '$$${VARIABLE} in '.__FUNCTION__.'()'); 

esta manera yo sólo escribo ddsm, golpeó Tab, y luego tengo que escribir el nombre exacto de La variable. Por lo que sería imprimir el siguiente:

dsm($variables, '$variables in ' . __FUNCTION__ . '()'); 

Después de eso, se puede cambiar la parte variables y escriba otro nombre, y el mismo se utiliza en la cadena. Un ejemplo:

Using ddsm code template

Pero estoy siendo demasiado rezagado para escribir esas cosas: D, y estoy ansioso por ver si hay una manera de utilizar todos los argumentos de una función dada cuando se utiliza una plantilla de código en NetBeans.

Respuesta

2

Esto realmente parece difícil. Si usted supiera que va a utilizar la macro cuando se declara la función, se puede utilizar plantillas de la siguiente manera:

// shortcut dsmfun1 
function ${FUNCTION_NAME}($$${PAR1}) { 
    dsm($$${PAR1}, '$$${PAR1} in ' . __FUNCTION__ . '()'); 

    ${selection}${cursor} 
} 

... 

// shortcut dsmfun4 
function ${FUNCTION_NAME}($$${PAR1}, $$${PAR2}, $$${PAR3}, $$${PAR4}) { 
    dsm($$${PAR1}, '$$${PAR1} in ' . __FUNCTION__ . '()'); 
    dsm($$${PAR2}, '$$${PAR2} in ' . __FUNCTION__ . '()'); 
    dsm($$${PAR3}, '$$${PAR3} in ' . __FUNCTION__ . '()'); 
    dsm($$${PAR4}, '$$${PAR4} in ' . __FUNCTION__ . '()'); 

    ${selection}${cursor} 
} 

plantillas Pareja darle declaración muy rápido y hay que escribir los nombres de los parámetros sólo una vez.

Si está agregando estas macros más adelante, es posible que desee echar un vistazo a this doc e implementar su comportamiento deseado (aunque eso podría ser bastante complicado).

Espero que esto ayude!

+0

+1, gracias, eso es una muy buena idea, pero eso significaría que tengo que crear tantas plantillas de código para estas funciones tantos argumentos que necesitaría en estas funciones . ¡Pero lo pensaré! – Sk8erPeter

1

¿Por qué no simplemente usas get_defined_vars() para pasarlos todos de una vez? De esta forma, tu macro solo necesita ser una sola línea estática.

function dsm($func, array $args) 
{ 
    foreach ($args as $name => $value) { 
     echo "in $func, arg '$name' is $value\n"; 
    } 
} 

function testModule_theme($existing, $type, $theme, $path) { 
    dsm(__FUNCTION__, get_defined_vars()); 
} 

testModule_theme(1, 2, 3, 4); 

Salida:

in testModule_theme, arg 'existing' is 1 
in testModule_theme, arg 'type' is 2 
in testModule_theme, arg 'theme' is 3 
in testModule_theme, arg 'path' is 4 
+0

+1, esta es una muy buena idea, pero no siempre quiero imprimir todas las variables, en muchos casos, quiero comentar uno o dos de ellos, es por eso que quería "reservar" líneas separadas para estas cosas de depuración. (Por cierto, [dsm()] (http://api.drupal.org/api/devel/devel.module/function/dsm/7) es una función en el módulo Devel de Drupal). – Sk8erPeter

Cuestiones relacionadas