ホームページ >バックエンド開発 >PHPチュートリアル >PHP が _autoload を使用してクラス インスタンスを自動的にロードする方法の詳細な説明
PHP の OO モードを使用してシステムを開発する場合、通常は各クラスの実装を別のファイルに保存するのが一般的です。これにより、クラスの再利用が容易になり、将来のメンテナンスにも便利になります。これは、OO 設計の基本的な考え方の 1 つでもあります
PHP5 より前では、クラスを使用する必要がある場合は、include/require を使用してクラスを直接インクルードするだけで済みました
test.class.php
<?php class abc{ function construct() { echo 'www.hzhuti.com; } } ?>
load.php
コードは次のとおりです
<?php class LOAD { static function loadClass($class_name) { $filename = $class_name.".class.php"; if (is_file($filename)) return include_once $filename; } } /** * 设置对象的自动载入 * spl_autoload_register — Register given function as autoload() implementation */ spl_autoload_register(array('LOAD', 'loadClass')); $a = new Test();//实现 自动加载 ,很多框架就用这种方法 自动加载类 ?>
autoload()
実際のプロジェクトでは、1つのPHPファイルにすべてのクラスを記述することは不可能であり、別のファイルで宣言されたクラスをPHPファイル内で呼び出す必要がある場合は、このファイルをインクルードする必要があります。輸入。ただし、多くのファイルを含むプロジェクトでは、必要なクラス ファイルを 1 つずつインクルードする必要がある場合、大きな問題は、各クラス ファイルの先頭に長い インクルード ファイルのリスト を記述しなければならないことです。使用するときに、このクラスが配置されているphpファイルをインポートできますか?
この目的のために、PHP は autoload() メソッドを提供します。このメソッドは、まだ定義されていないクラスを使用しようとすると自動的に呼び出されます。この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。
autoload() メソッドによって受け取られるパラメータの 1 つは、ロードされるクラスのクラス名です。そのため、この時点では、クラス名は Person.php のようにファイル名に対応する必要があります。対応するクラス名は Pserson です。
以下の完全な例を見てください
class ClassA{ public function construct(){ echo “ClassA load success!”; } } //定义一个类ClassA,文件名为ClassA.php class ClassA{ public function construct(){ echo “ClassA load success!”; } } class ClassB extends ClassA { public function construct(){ //parent::construct(); echo “ClassB load success!”; } } //定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA class ClassB extends ClassA { public function construct(){ //parent::construct(); echo “ClassB load success!”; } }
テスト用に 2 つのクラスを定義した後、次のように autoload() メソッドを含む PHP 実行プログラム ファイルを作成しましょう:
function autoload($classname){ $classpath=”./”.$classname.'.php'; if(file_exists($classpath)){ require_once($classpath); } else{ echo ‘class file'.$classpath.'not found!'; } } $newobj = new ClassA(); $newobj = new ClassB();
以上がPHP が _autoload を使用してクラス インスタンスを自動的にロードする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。