2012-07-05 88 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()。如果函数不存在,你可以编写你自己的错误处理程序。 ;)