0

在 Drupal 中,有很多函数是 hook_functionname1,hook_functionname2。编写模块时,您必须将文本“hook”替换为您的模块名称,因此 Drupal 加载您的模块“my_drupal_module”并运行“my_drupal_module_functionname1”和“my_drupal_module_functionname2”之类的钩子。

是否可以在 PHP 中使用 DEFINE 来简单地定义单词“hook”并将其设置为字符串?如果可能,那么您应该能够逐字复制和粘贴 hook_anything 而不必更改它。而且,如果您想更改模块的名称,您只需更改单个常量,而不是查找/替换所有函数名称。

那么您可以使用 DEFINE 或其他一些设置在 PHP 中进行元编程吗?

4

3 回答 3

2

你想要这样的东西:

$moduleFunctionName = 'hook';

$functionNameOne = $moduleFunctionName . '_functionname1';
$functionNameTwo = $moduleFunctionName . '_functionname2';

$functionNameOne = function($var) {
 // blah
}
..//

函数 $functionNameOne 是通过匿名函数定义的。它从 php 5.3.0 开始在 php 中可用

于 2013-10-17T20:01:56.457 回答
1

也许你想要这样的东西

 <?
    define('PREFIX', 'myprefix');

    //like this time you deside that this will me the second part

    $somevar = '_this_function_name';

    // now we combine prefix and name 
    $function_name = PREFIX . $somevar;

    // now we check if we can run this function
    if(!function_exists($function_name)){
    echo "no function $funcion_name exist";
    }
    else{
    $function_name();
    }

    function myprefix_this_function_name(){
    echo 'running function';
    }
    ?>

这将输出

running function
于 2013-10-17T20:29:54.590 回答
0

这实际上有效:

define('FN_NAMESPACE', 'hook_');
${FN_NAMESPACE . 'functionNameOne'} = function($var) {
    echo "Hi, I got $var\n";
};
$hook_functionNameOne('test');

将输出

Hi, I got test
于 2013-10-17T20:18:28.697 回答