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
true
http://www.bkjia.com/PHPjc/322768.html
技術記事
PHPの開発プロセスにおいて、外部からクラスを導入したい場合、通常はincludeメソッドやrequireメソッドを使ってクラスを定義したファイルをインクルードすることになりますが、これにより...