2012-09-11 483 views
0

Possible Duplicate:
Removing a function at runtime in PHP“销毁”的功能

我有一个脚本,是包括不同的文件运行时。这些文件都包含一个具有相同名称的函数。我只需要目前包含的存在。有什么办法来启用动态文件,所以它不会导致致命错误:无法重新声明函数()? 换句话说,我需要重命名或删除以前的功能。

的功能在传统的单向函数FN(声明){;}

+0

您还在使用过程代码吗? – Tarun

+0

是的,我使用程序代码 – user965748

+0

可能的意思是说,你应该去OO。它为你解决了这样的问题。让我知道,如果你需要一些很好的教程链接。 – Kuro

回答

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(); 

然后在每个包含文件的,而不是一个functi对,你会定义包含函数的类,像这样:

class Normal_Class 
{ 
    public function do_the_action() 
    { 
     // Implementation for normal case goes here 
    } 
} 

这不仅解决您的问题,它让你在旅途中学习其他先进/ OO PHP技术 - 自动加载的文件,所以你不要每次都不必指定include_once,定义层次结构和接口等。

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

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