我正在收集一系列 php 文件并测试以查看单个函数是否返回有效输出。为了简化该过程,它们的所有功能都以相同的名称命名。那么我可以运行:
foreach($fileList as $file) {
require($file);
echo $testFunction();
}
问题是 php 抛出错误“无法重新声明函数”,因为第二个文件的函数与第一个文件的函数名称相同。我想要做的是在我测试它的输出后“取消声明”一个函数,但我知道这是不可能的,我正在尝试以程序方式处理这个问题。不幸的是,unlink($file) 不会删除函数的实例。有没有不使用 OOP 方法的简单方法来处理这个问题?
更新#1
使用 exec() 而不是 shell_exec() 可以让我检查错误状态(这是#2)。CHMOD 是必要的,因为用户/组阻止了执行(一旦脚本运行,此离线服务器上的安全设置将被更新)。此时,它不会回显任何内容,因为 shell_exec() 返回错误(至少我认为是这样,因为 shell_exec 的输出为空并且 exec 返回错误 #2)。这是一个更新的测试:
$fileList = array('test.php');
foreach($fileList as $file) {
// load code from the current file into a $code variable,
// and append a call to the function held in the $testFunction variable
$code = file_get_contents($file) . "\n" . 'testFunction();';
// save this to a temporary file
file_put_contents('test-file.php', $code);
// execute the test file in a separate php process,
// storing the output in the $output variable for examination
//*************** */
$output=null;
$retval=null;
$absPath = realpath('test-file.php');
chmod($absPath,0777);
echo $absPath;
exec($absPath, $output, $retval);
echo "Returned with status $retval and output:\n";
print_r($output);
}
更新#2 虽然你不能取消声明一个函数,但你可以重复地将不同的函数分配给同一个 var。例如:
$listOfFunctionNames = array('function1', 'function2', 'function3);
foreach($listOfFunctionNames as $func) {
$funxion = $func;
$funxion();
}