在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或其他设置进行元编程吗?
答案 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