ホームページ >バックエンド開発 >PHPチュートリアル >PHPのautoload自動読み込み機構の使い方_PHPチュートリアル

PHPのautoload自動読み込み機構の使い方_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:32:52950ブラウズ

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

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

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

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

$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
}
$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 。 php';
}
/ /ロードしてください
function autoload($className) {
$file = str_replace('/', DIRECTORY_SEPARATOR, $className)
}
//開始loading
spl_autoload_register('autoload' ; :


//システムデフォルトの__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__autoload', false );
}
}


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



http://www.bkjia.com/PHPjc/322768.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/322768.html

技術記事
PHPの開発プロセスにおいて、外部からクラスを導入したい場合、通常はincludeメソッドやrequireメソッドを使ってクラスを定義したファイルをインクルードすることになりますが、これにより...

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