0

可能重复:
在 PHP 运行时删除函数

我有一个脚本,它在运行时包含不同的文件。这些文件都包含同名的函数。我只需要当前包含的存在。有什么方法可以启用动态文件,因此不会导致致命错误:无法重新声明函数()?换句话说,我需要重命名或删除以前的函数。

该函数以经典方式声明 function fn(){;}

4

3 回答 3

1
if (!function_exists('myFunction')) {
    function myFunction() {
        ....
    }
}

只会定义加载的函数的第一个版本,但除非您使用runkitapd扩展(或类似),否则您不能重命名或删除函数

于 2012-09-11T17:15:48.483 回答
1

您应该将您的函数包装在“function_exists”检查中:

if (!function_exists('my_func')){

  function my_func(){
    //...
  }

}

你可以在这里找到更多细节:http: //php.net/manual/fr/function.function-exists.php

于 2012-09-11T17:15:53.747 回答
0

与其每个文件都定义一个同名的顶级函数,不如考虑使用一个非常简单的 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每次都指定,定义层次结构和接口等。

于 2012-09-11T17:49:59.747 回答