ホームページ  >  記事  >  バックエンド開発  >  PHPクラスの自動ロード動作例を詳しく解説

PHPクラスの自動ロード動作例を詳しく解説

高洛峰
高洛峰オリジナル
2016-12-21 14:00:54924ブラウズ

この記事の例では、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 サイトの関連記事に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。