__autoload() は、特定のクラスのメソッドではなく、PHP 実行環境で合意された関数です。クラスが使用前に現在のファイルにロードされていない場合、通常、クラスをロードするために __autoload() 関数が自動的に呼び出されます。これらのクラスのロード規則はすべて合意されています。たとえば、これらのクラスはクラス名にちなんで名付けられたファイルに含まれています。この方法により、クラスのオンデマンドロードが実現され、スクリプトの実行前に不要なクラスをロードすることがなくなり、リソースの使用量と送信が削減されます。パフォーマンス。
注: __autoload() 内のエラーは try-catch では捕捉できません。
コードは次のとおりです | コードをコピー |
関数 __autoload($class_name){ require_once(PATH.'/calsses/'.$class_name.'.php'); } $obj1 = 新しい mycalss1(); |
__autoload() によって自動的に呼び出される関数を登録します:
SPL コードベースは PHP5.0 以降、デフォルトで自動的に有効になります
spl_autoload_register([callback]); //__autoload() で特定の実装ロード コードを記述する代わりに、この関数を使用してコールバック関数を登録できます。
クラスメソッドをコールバック関数として使用する場合は、配列を渡す必要があります:
コードは次のとおりです | コードをコピー |
spl_autoload_register(array('class_name'|$obj,'method_name')); 例: spl_autoload_register(array($this,'autoloadClass')); |
spl_autoload_register(array('YiiBase','autoload')); // YII フレームワークのオートロード クラスの実装 YiiBase クラスは autoload メソッドを実装します。 spl_autoload_register() は複数のロード関数を登録でき、クラス ファイルが正常にロードされる前に、登録されているすべてのロード関数が 1 つずつ試行されます。これは、異なるクラスが異なるロジックを使用してクラス ファイルをインポートする場合に便利です。
spl_autoload_unregister(); //登録されたロード関数をキャンセルします。パラメータは spl_autoload_register() と同じです。
spl_autoload_functions(); // 登録されているすべての __autoload() 関数を配列で返します
spl_autoload(class_name[,file_extensions]); //__autoload() 関数のデフォルトの実装。 spl_autoload_register() の呼び出し時に関数名が渡されなかった場合、この関数の実行規則は次のとおりです。クラス名はファイル名として小文字に変換され、渡された file_extensions (複数) が使用されます。拡張子はカンマで区切られており、拡張子はデフォルト (.inc および .php) です。取得したファイル名に基づいて、php.ini に設定されているインクルード パスを検索してみてください。
spl_autoload_call(class_name);//登録されているすべての __autoload() 関数を手動で呼び出して、クラス ファイルをアクティブにロードします
spl_autoload_extensions([file_extentions]); // spl_autoload() で使用できるファイル拡張子を登録または返します。拡張子は .a.b の形式になります。例:
コードは次のとおりです | コードをコピー |
spl_autoload_extentions(".class.php"); spl_autoload_register(); // spl_autoload() を使用してクラスファイルを自動的にロードしてみます //このように spl_autoload('myclassName'); はファイル "myclassName.class.php" をロードしようとします。 |
コードは次のとおりです | コードをコピー |
プライベート関数 __construct() { } パブリック静的関数 getClasses($pre_path = '/') { |
2. 配列を登録する
注: ステップ 1 のクラスのパスは、Utils ではなく、init.php に相対しています。これは、init.php の自動ロード関数 spl_autoload_register を介してクラスが必要であるためです。
コードをコピー | |
require_once '/Utils/Utils.php'; |
コードをコピー | |
require_once 'Init.php'; $dao = 新しいUserDao();
$result = $dao->findByName('zcl'); |