PHP の autoload 自動ロードメカニズムの使用手順

WBOY
リリース: 2016-06-13 12:12:25
オリジナル
939 人が閲覧しました

PHP開発中、外部からクラスを導入したい場合、通常はincludeメソッドやrequireメソッドを使用してクラスを定義したファイルをインクルードしますが、これにより誤ってincludeメソッドやrequireメソッドが大量に呼び出されてしまう可能性があります。 、エラーが発生し、コードの保守が困難になります。

PHP5 以降、クラス ファイルへの参照を自動的に含めることができる __autoload インターセプター メソッドが導入されました。通常は次のように記述します。

コードをコピー コードは次のとおりです。


function __autoload($className) {
include_once $className .
}

$ user = new User();


PHP エンジンが不明なクラスの操作をインスタンス化しようとすると、__autoload() メソッドが呼び出され、必要なクラスをロードする最後の機会が PHP に与えられます。エラーで失敗します。したがって、上記のコードが実行されると、PHP エンジンは実際に __autoload メソッドを自動的に実行し、ファイル User.class.php をインクルードします。

__autoload 関数でスローされた例外は、catch ステートメント ブロックではキャッチできず、致命的なエラーが発生します。

PHP の CLI 対話モードを使用する場合、自動読み込みメカニズムは実行されません。

たとえば、PEAR スタイルの命名規則を使用したい場合は、User/Register.php ファイルをインポートする必要があります。次のようにすることもできます:

コードをコピーします コードは次のとおりです:


//ロードしてください
function __autoload($className) {
$file = str_replace('_', DIRECTORY_SEPARATOR, $className);
include_once $ file . 'php';
$userRegister = new User_Register();


このメソッドは便利ですが、大規模なアプリケーションに複数のクラスが導入されている場合 ライブラリを使用する場合、さまざまなクラス ライブラリの自動ロード メカニズムが原因で、説明できない問題が発生する可能性があります。 PHP5 での SPL 標準ライブラリの導入後、spl_autoload_register() 関数という新しいソリューションが追加されました。

この関数の機能は、関数を SPL の __autoload 関数スタックに登録し、システムのデフォルトの __autoload() 関数を削除することです。 spl_autoload_register() 関数が呼び出されると、未定義のクラスが呼び出されると、システムは __autoload() 関数を自動的に呼び出すのではなく、spl_autoload_register() 関数に登録されているすべての関数を順番に呼び出します。 次の例では、User/Register.php を呼び出します。 User_Register.class.php ではありません:

コードをコピーします コードは次のとおりです:

//ロードしないでください
function __autoload( $className) {
include_once $className . '.class.php';
}
//ロードしてください
function autoload($className) {
$file = str_replace('/' , DIRECTORY_SEPARATOR, $className);
include_once $file .
}
//読み込み開始
spl_autoload_register('autoload'); = new User_Register() ;


spl_autoload_register() を使用する場合は、次のように、より安全な初期化呼び出しメソッドを使用することも検討できます。コードをコピーします

コードは次のとおりです。

//システムのデフォルトの __autoload 関数 function __autoload($className) { include_once $className .class .php' ; }

//__SPL ロード用の autoload 関数

function autoload($className) {
$file = str_replace('_', DIRECTORY_SEPARATOR, $className); $file . '.php';
}
//間違った関数名をロードし、同時にデフォルトの __autoload メカニズムをキャンセルしました...囧
spl_autoload_register('_autoload', false);
//フォールトトレランスメカニズム
if(false === spl_autoload_functions()) {
if(function_exists('__autoload')) {
spl_autoload_register('__autoload', false); }
}


奇妙なトリック: Unix/Linux 環境で、管理の便宜上、複数の小さなクラスがある場合、それらをすべて php ファイルに記述すると、次のようになります。 ln -s コマンドを使用してソフト リンクを作成し、異なるクラス名を持つ複数のコピーにすばやく配布し、自動ロード メカニズムを通じてロードします。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート