6

是否可以编写一个 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 代码模板

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

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

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

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

使用 ddsm 代码模板

但是我仍然太落后而无法键入这些内容:D,而且我很好奇在 NetBeans 中使用代码模板时是否有一种方法可以使用给定函数的所有参数。

4

2 回答 2

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}
}

一对模板为您提供非常快速的声明,您只需键入一次参数的名称。

如果您稍后要添加这些宏,您可能希望查看此文档并实现您想要的行为(即使这可能非常棘手)。

希望这可以帮助!

于 2012-08-17T13:05:45.413 回答
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
于 2012-08-17T17:42:44.990 回答