在PHP中,你可以定义一个可以在函数名中使用的常量吗?

时间:2013-10-17 19:54:50

标签: php constants drupal-modules

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

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

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

3 个答案:

答案 0 :(得分:2)

你想要这样的东西:

$moduleFunctionName = 'hook';

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

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

函数$ functionNameOne是通过匿名函数定义的。它可以从php 5.3.0中获得php。

答案 1 :(得分: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

答案 2 :(得分:0)

这实际上有效:

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

将输出

Hi, I got test