2012-07-05 60 views
0

可能重複:
autoload functions in php自動包含缺失的功能?

我在PHP框架的工作。我想知道是否有一種方法可以在函數不存在時重寫錯誤處理程序,以自動嘗試包含首先聲明函數的文件。

例子:

echo general_foo(); // <-- general_foo() is not yet stated. 
        // A handler tries to include_once('functions/general.php') based on the first word of the function name. 
        // If the function still doesn't exist - throw an error. 

從這個勝利將跳過編譯不必要的文件或跳過跟蹤和狀態包括在這裏和那裏。

只需__autoload函數而不是類。

+0

如果是一個個人/內部框架,你可以使用像f('fn',array([args]));但我認爲這種交換是不值得的。 – 2012-07-05 22:25:46

+0

[自動加載功能在PHP]中可能的重複(http://stackoverflow.com/questions/4196881/autoload-functions-in-php) - 錯誤 - [自動加載程序的功能(2011年1月19日)](http:// stackoverflow .com/questions/4737199/autoloader-for-functions) – hakre 2012-08-27 10:26:19

回答

1

它不存在,可能永遠不會。是的,我也希望它......但是,這並不妨礙您使用具有靜態函數的類並讓PHP自動加載。

http://php.net/spl-autoload-register

+0

所以通過調用一個方法而不是一個函數,我將能夠在類事件內部完成類似的事情? – tim 2012-07-05 21:50:46

+0

是的。我已經添加了答案的鏈接。但是你應該首先谷歌搜索「PSR-0」和「PSR-0 Classloader」(因爲你已經使用谷歌搜索:「Composer」;)),所以你不需要重新發明輪子。 – KingCrunch 2012-07-05 21:53:53

+0

使用__call()解決,請參閱我發佈的解決方案。 – tim 2012-07-05 23:56:02

-1

我解決它像這樣

類文件類/ functions.php中:

class functions { 

    public function __call($function, $arguments) { 

     if (!function_exists($function)) { 
     $function_file = 'path/to/functions/' . substr($function, 0, strpos($function, '_')).'.php'; 
     include_once($function_file); 
     } 

     return call_user_func_array($function, $arguments); 
    } 
    } 

功能文件功能/ test.php的

function test_foo() { 
    return 'bar'; 
    } 

的腳本myscript.php:

require_once('classes/functions.php'); 
    $functions = new functions(); 

    echo $functions->test_foo(); // Checks if function test_foo() exists, 
           // includes the function file if not included, 
           // and returns bar 

您最終可以使用__autoload()自動加載classes/functions.php。

最後,my_function()的語法變成$ functions-> my_function()。如果函數不存在,你可以編寫你自己的錯誤處理程序。 ;)