是否可以使用函数头中声明的所有参数为编写NetBeans代码模板(例如,使用这些变量调用另一个函数)?参数可以不同,所以看起来并不容易。
例如,有时我想打印函数中的所有参数以进行调试。
这是一个示例用法(根据参数的数量多次调用dsm()
函数):
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(
// ......
);
}
这是另一个:
function testModule_block_view($delta = '') {
dsm($delta, '$delta in ' . __FUNCTION__ . '()');
$block = array();
// .....
return $block;
}
如您所见,第一种情况有4个参数,第二种情况只有1个。参数的名称也会根据给定的函数而改变。
我已经使用dsm()
函数编写了一个代码模板:
dsm($$${VARIABLE newVarName default="variables"}, '$$${VARIABLE} in '.__FUNCTION__.'()');
这样我输入ddsm
,点击 Tab ,然后我必须输入变量的确切名称。所以它会打印出以下内容:
dsm($variables, '$variables in ' . __FUNCTION__ . '()');
之后,我可以更改variables
部分,并键入另一个名称,并在字符串中使用相同的名称。一个例子:
但是我仍然懒得输入那些东西:D,我很好奇是否有办法在NetBeans中使用代码模板时使用给定函数的所有参数。
答案 0 :(得分:2)
这看起来真的很难。如果您在声明函数时知道将使用宏,则可以使用以下模板:
// 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}
}
情侣模板为您提供了快速的声明,您只需输入一次参数名称。
如果您稍后要添加这些宏,您可能需要查看this doc并实现所需的行为(即使这可能非常棘手)。
希望这有帮助!
答案 1 :(得分:1)
为什么不用get_defined_vars()一次性传递它们?这样,您的宏只需要是一个静态行。
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);
输出:
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