この記事では、主にPHPで遅延ロードを実装する方法を紹介し、例とともに遅延ロードの実装テクニックを分析します。必要な場合は参照してください。
通常の PHP の読み込みは、include()、require() などのメソッドを通じて外部ファイルを読み込み、インスタンスを通じてメソッドを呼び出すか、静的メソッドを直接呼び出すことです。一部のフレームワークでは、この方法で import ステートメントを記述するのは非常に面倒です。すべてのファイルはインポートされ、直接インスタンス化によって使用できますが、この方法では、より多くのクラス パッケージが作成されるほど、より多くのものが読み込まれるため、プログラムのパフォーマンスに影響します。
PHP のリフレクション クラス ReflectionClass を通じて、対応するクラスのリフレクション クラスを直接取得できます。
test.php ファイルは次のとおりです:
?
2 3 4 5 6 7
|
クラステスト{ パブリック関数 showName(){ var_dump(__CLASS__); } } ?>
|
?
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
var_dump(get_include_files()); $rf = 新しい ReflectionClass('test'); var_dump(get_include_files()); $testObj = $rf->newInstance(); $testObj->showName(); 関数 __autoload($classname){ $クラスパス = './' .$クラス名 . if (file_exists($classpath)) {require_once($classpath); }その他{ echo 'クラスファイル'.$classpath.'見つかりません!'; } } ?> //配列 // 0 => 文字列 'D:codewwwtestindex.php'(length=26) //配列 // 0 => 文字列 'D:codewwwtestindex.php'(length=26) // 1 => 文字列 'D:codewwwtexttest.php'(length=25) //文字列 'テスト' (長さ=4)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
var_dump(spl_autoload_functions()); spl_autoload_register('newAutoload'); var_dump(spl_autoload_functions()); $testObj1 = getInstance('test'); $testObj2 = getInstance('test'); $testObj3 = getInstance('test'); 関数 getInstance($class, $returnInstance = false){ $rf = 新しい ReflectionClass($class); if ($returnInstance) return $rf->newInstance(); } 関数 newAutoload($classname){ $クラスパス = './' .$クラス名 . if (file_exists($classpath)) { var_dump('成功が必要'); require_once($classpath); } 他 { echo 'クラス ファイル ' が見つかりません!'; } } //配列 // 0 => 文字列 '__autoload' (長さ=10) //配列 // 0 => 文字列 'newAutoload' (長さ=11) //文字列 '成功が必要' (長さ=15)
|
書き換えられた自動ロードメソッドは、必要に応じてクラス名を判断して異なるファイルパスを定義できます。 getInstance は静的変数を使用してインスタンスを保存できますが、これはデザイン パターンのシングルトン パターンも使用します。
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/963972.html