0

重複の可能性:
php の autoload 関数

私は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 を使用します。

4

2 に答える 2

1

それは存在せず、おそらく決して存在しません。はい、私もそれを望みます...しかし、これは静的関数を持つクラスを使用してPHPを自動ロードさせることを妨げるものではありません。

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

于 2012-07-05T21:46:14.140 に答える
-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->my_function() になります。また、関数が存在しない場合は、独自のエラー ハンドラーを作成できます。;)

于 2012-07-05T22:50:52.703 に答える