可能重复:
在 PHP 运行时删除函数
我有一个脚本,它在运行时包含不同的文件。这些文件都包含同名的函数。我只需要当前包含的存在。有什么方法可以启用动态文件,因此不会导致致命错误:无法重新声明函数()?换句话说,我需要重命名或删除以前的函数。
该函数以经典方式声明 function fn(){;}
可能重复:
在 PHP 运行时删除函数
我有一个脚本,它在运行时包含不同的文件。这些文件都包含同名的函数。我只需要当前包含的存在。有什么方法可以启用动态文件,因此不会导致致命错误:无法重新声明函数()?换句话说,我需要重命名或删除以前的函数。
该函数以经典方式声明 function fn(){;}
您应该将您的函数包装在“function_exists”检查中:
if (!function_exists('my_func')){
function my_func(){
//...
}
}
你可以在这里找到更多细节:http: //php.net/manual/fr/function.function-exists.php
与其每个文件都定义一个同名的顶级函数,不如考虑使用一个非常简单的 OO 结构:
假设你有这样的事情:
switch ( $some_condition )
{
case 'normal':
default:
include_once 'normal_function.php';
break;
case 'special':
include_once 'special_function.php';
break;
case 'secret':
include_once 'secret_function.php';
break;
}
do_the_action();
你可以用这样的东西替换它:
switch ( $some_condition )
{
case 'normal':
default:
include_once 'normal_class.php';
$handler_object = new Normal_Class();
break;
case 'special':
include_once 'special_class.php';
$handler_object = new Special_Class();
break;
case 'secret':
include_once 'secret_class.php';
$handler_object = new Secret_Class();
break;
}
$handler_object->do_the_action();
然后在每个包含的文件中,您将定义一个包含该函数的类,而不是一个函数,如下所示:
class Normal_Class
{
public function do_the_action()
{
// Implementation for normal case goes here
}
}
这不仅解决了您的问题,还让您走上了学习其他高级/OO PHP 技术的道路 - 自动加载文件,这样您就不必include_once
每次都指定,定义层次结构和接口等。