2012-09-11 319 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擴展(或類似的),你不能重命名或刪除功能