13

私は php を初めて使用し、自分のコードで php5 の __autoload 機能を使用したいと考えています。index.php に以下のコードを書きましたが、__autoload 関数を呼び出す方法とタイミングがわかりません。

function __autoload($class) {
    if (file_exists($class . '.php')) {
        include($class . '.php');
    } else {
        throw new Exception('Unable to load class named $class');
    }
}

このスレッドも見ましたが、アプリケーションにそのようなオートローダー クラスがありません。オートローディングを使用するには、アプリケーションごとに個別のクラスが必要ですか? そうでない場合、上記のような単一の機能を使用して、そのタスクを完了することはできますか? 上記の__autoload関数をphpコード内で呼び出す方法を誰か説明できますか?

4

5 に答える 5

18

自分自身を呼び出すのではなく__autoload()、PHP がクラスの実装を見つけようとしているときに呼び出します。

例えば...

function __autoload($className) {
     include $className . '.php';
}

$customClass = new CustomClass;

...これは を呼び出し、引数として__autoload()渡します。CustomClassこの (例としてばかげた)実装は、最後に拡張子を追加して__autoload()ファイルをインクルードしようとします。php

余談ですが、spl_autoload_register()代わりに使用する必要があります。その後、複数の実装を持つことができます。これは、オートローダーで複数のライブラリを使用する場合に役立ちます。

...使用__autoload()することは推奨されておらず、将来的に非推奨または削除される可能性があります。

ソース

于 2012-10-03T05:48:02.000 に答える
9

PHP では __autoload() はマジック メソッドです。これは、クラスのオブジェクトを作成しようとすると自動的に呼び出されることを意味し、PHP エンジンがスクリプトでクラスを見つけられない場合は、__autoload() マジック メソッドを呼び出そうとします。

以下の例のように実装できます。

function __autoload($ClassName)
{
    include($ClassName.".php");
}

$CustomClassObj = new CustomClass();
$CustomClassObj1 = new CustomClass1();
$CustomClassObj2 = new CustomClass2();

新しいオブジェクトを作成するときに、すべてのクラス ファイルが自動的に含まれます。

PSこれが機能するには、クラス名と同じクラスファイル名を指定する必要があります。

于 2012-10-03T13:39:15.883 に答える
3

require_onceメモリを消費する代わりに使用する必要がありincludeます。最良の方法は次のとおりです。

function __autoload($class) {
   $class_name = strtolower($class);
   $path       = "{$class}.php";
   if (file_exists($path)) {
       require_once($path);
   } else {
       die("The file {$class}.php could not be found!");
   }
}
于 2014-12-14T17:51:46.473 に答える
0

spl_autoload_register を使用する代わりに __autoload() を使用しないでください。言うPHPマニュアルを参照してください

spl_autoload_register() は、クラスを自動ロードするためのより柔軟な代替手段を提供します。このため、__autoload() の使用は推奨されておらず、将来的に非推奨または削除される可能性があります。

    <?php

    // function __autoload($class) {
    //     include 'classes/' . $class . '.class.php';
    // }

    function my_autoloader($class) {
        include 'classes/' . $class . '.class.php';
    }

    spl_autoload_register('my_autoloader');

    // Or, using an anonymous function as of PHP 5.3.0
    spl_autoload_register(function ($class) {
        include 'classes/' . $class . '.class.php';
    });

    ?>
于 2015-02-14T04:58:34.847 に答える