ホームページ  >  記事  >  バックエンド開発  >  PHPの自動ロード機構autoloadの使用例を詳しく解説

PHPの自動ロード機構autoloadの使用例を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-01 09:33:351405ブラウズ

PHP5 以降、クラス ファイルの references を自動的に含めることができる autoload インターセプター メソッドが導入されました。具体的な使用方法は以下を参照してください。

PHPの開発プロセスにおいて、外部からクラスを導入したい場合、通常includerequireメソッドを使ってクラスを定義したファイルをインクルードすることになりますが、これによりファイルがインクルードされてしまう可能性があります。ファイルを参照する新しいスクリプトでは、多数の include メソッドまたは require メソッドの呼び出しが存在し、それらを誤って省略するとエラーが発生し、コードの保守が困難になります。

PHP5 以降、クラス ファイルへの参照を自動的に含めることができるオートロード インターセプター メソッドが導入されました:

function autoload($className) { 
include_once $className . '.class.php'; 
} 
$user = new User();

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

オートロード関数でスローされた例外は、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 . '.php'; 
} 
//开始加载 
spl_autoload_register('autoload'); 
$userRegister = 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); 
include_once $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の自動ロード機構autoloadの使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。