この記事の例では、PHP クラスの自動ロード操作について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
クラスの自動ロード
外部ページでは、クラスファイルを導入する必要はありませんが、プログラムは必要に応じてクラスを自動的に「動的にロード」します。それ。
①オブジェクトを新規作成する場合
②クラス名を直接使用する(静的プロパティとメソッドを操作するため)
__autoloadマジック関数を使用する
2つの状況が発生した場合、この関数が呼び出され、この関数は定義を必要とします事前にクラスファイルをロードするための一般的なステートメントを記述しておきます
function __autoload($name){ require './lib/'.$name.'.class.php'; }
spl_autoload_register()を使用します
これを使用して、__autoload()を置き換えることができる複数の関数を登録(宣言)します。当然、これらの関数を定義する必要があります。 、この関数は __autoload() と同じ機能を持っていますが、現時点ではより多くの状況を処理できます
//注册用于自动加载的函数 spl_autoload_register("model"); spl_autoload_register("controll"); //分别定义两个函数 function model($name){ $file = './model/'.$name.'.class.php'; if(file_exists($file)){ require './model/'.$name.'.class.php'; } } //如果需要一个类,但当前页面还没加载该类 //就会依次调用model()和controll(),直到找到该类文件加载,否则就报错 function controll($name){ $file = './controll/'.$name.'.class.php'; if(file_exists($file)){ require './controll/'.$name.'.class.php'; } }
//若注册的是方法而不是函数,则需要使用数组 spl_autoload_register( //非静态方法 array($this,'model'), //静态方法 array(__CLASS__,'controller') );
プロジェクト シナリオ アプリケーション
//自动加载 //控制器类 模型类 核心类 //对于所有的类分为可以确定的类以及可以扩展的类 spl_autoload_register('autoLoad'); //先处理确定的框架核心类 function autoLoad($name){ //类名与类文件映射数组 $framework_class_list = array( 'mySqldb' => './framework/mySqldb.class.php' ); if(isset($framework_class_list[$name])){ require $framework_class_list[$name]; }elseif(substr($name,-10)=='Controller'){ require './application/'.PLATFORM.'/controller/'.$name.'.class.php'; }elseif(substr($name,-6)=='Modele'){ require './application/'.PLATFORM.'/modele/'.$name.'.class.php'; } }
この記事が PHP プログラミング設計の皆様のお役に立てれば幸いですヘルプ。
PHP クラスの自動ロード操作の詳細な例については、PHP 中国語 Web サイトの関連記事に注目してください。