NetBeans代码模板,用于使用函数头中声明的所有参数

时间:2012-07-31 23:22:53

标签: php netbeans

是否可以使用函数头中声明的所有参数为编写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()函数编写了一个代码模板:

ddsm code template

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

这样我输入ddsm,点击 Tab ,然后我必须输入变量的确切名称。所以它会打印出以下内容:

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

之后,我可以更改variables部分,并键入另一个名称,并在字符串中使用相同的名称。一个例子:

Using ddsm code template

但是我仍然懒得输入那些东西:D,我很好奇是否有办法在NetBeans中使用代码模板时使用给定函数的所有参数。

2 个答案:

答案 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