自动包含缺失的功能?

时间:2012-07-05 21:44:20

标签: php function error-handling include

  

可能重复:
  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用于函数而不是类。

2 个答案:

答案 0 :(得分:1)

它不存在,可能永远不会存在。是的,我也喜欢它...但是,这并不妨碍您使用具有静态函数的类并让PHP自动加载。

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

答案 1 :(得分:-1)

我解决了这个问题

类文件classes / 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);
    }
  }

函数文件functions / 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-&gt; my_function()。如果函数不存在,您可以编写自己的错误处理程序。 ;)