ホームページ >バックエンド開発 >PHPチュートリアル >PHPクラスの登録と自動ロード__autoload_PHPチュートリアル

PHPクラスの登録と自動ロード__autoload_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 16:56:51896ブラウズ

__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 の形式になります。例:

1. 登録する必要のあるクラスを配列に配置します

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

spl_autoload_extentions(".class.php");

spl_autoload_register(); // spl_autoload() を使用してクラスファイルを自動的にロードしてみます

//このように spl_autoload('myclassName'); はファイル "myclassName.class.php" をロードしようとします。

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


最終クラスのユーティリティ {

プライベート関数 __construct() {

}

パブリック静的関数 getClasses($pre_path = '/') {
$classes = array(
'DBConfig' => $pre_path.'DBConfig/DBConfig.php',
'ユーザー' => $pre_path.'Model/User.php',
'Dao' => $pre_path.'Dao/Dao.php',
'UserDao' => $pre_path.'Dao/UserDao.php',
'UserMapper' => $pre_path.'Mapping/UserMapper.php',
);
$classes を返す;
}
}
?>

2. 配列を登録する

注: ステップ 1 のクラスのパスは、Utils ではなく、init.php に相対しています。これは、init.php の自動ロード関数 spl_autoload_register を介してクラスが必要であるためです。

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

require_once '/Utils/Utils.php';
最終クラス初期化 {

/**
     * システム構成
    */
パブリック関数 init() {
// エラー報告 - 開発用のすべてのエラー (
があることを確認してください) // php.ini ファイルで display_errors = オン)
error_reporting ( E_ALL | E_STRICT );
mb_internal_encoding ( 'UTF-8' );
//クラスを登録します
spl_autoload_register ( array ($this,'loadClass' ) );
}

/**
     * クラスローダー
    */
パブリック関数loadClass($name) {
$classes = Utils::getClasses ();
If (! array_key_exists ( $name, $classes )) {
die ( 'クラス "' . $name . '" が見つかりません。' );
}
require_once $classes [$name];
}
}
$init = 新しい初期化 ();
$init->init();
?>

3. この例では、使用される te​​st.php に init.php を要求します

コードは次のとおりですコードをコピー
require_once 'Init.php';

$dao = 新しいUserDao();

$result = $dao->findByName('zcl');
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631580.html技術記事 __autoload() は、特定のクラスのメソッドではなく、PHP 実行環境で合意された関数です。使用前にクラスが現在のファイルにロードされていない場合、__autoload() 関数が自動的に呼び出されて追加されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。