您无法重新定义全局函数(在 runkit 之外,但那是不好的巫毒教),因此您仍然可以选择使用类驱动解决方案或匿名函数驱动解决方案,如下所示。
您可以编写一个函数来将所有包含的函数组装到一个调用队列中(这只是另一个运行队列的匿名函数):
function queueFunctions(array $functions){
return function()
use ($functions) {
foreach($functions as $function) {
$function();
}
};
}
并按照您的描述从每个文件返回匿名函数,而不是重新定义全局函数:
文件1.php
return function() {
echo 'Hello';
};
文件2.php
return function() {
echo 'World';
};
那么你也能:
// both
$function = queueFunctions([
include('file1.php'),
include('file2.php'),
]);
$function(); // HelloWorld
// one of them
$function = queueFunctions([
include('file2.php'),
]);
$function(); // World
// repeated calls
$function = queueFunctions([
include('file2.php'),
include('file1.php'),
include('file2.php'),
]);
$function(); // WorldHelloWorld