Maison >développement back-end >tutoriel php >Comment comprendre l'opération de chargement automatique des classes php

Comment comprendre l'opération de chargement automatique des classes php

伊谢尔伦
伊谢尔伦original
2017-07-01 10:12:381368parcourir

Cet article présente principalement le fonctionnement du chargement automatique de la classe PHP . Il analyse en détail les fonctions et les techniques d'implémentation liées au fonctionnement du chargement automatique de la classe PHP sous forme d'exemples. peut s'y référer

L'exemple de cet article décrit l'opération de chargement automatique de la classe PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Chargement automatique des classes

Dans les pages externes, il n'est pas nécessaire d'introduire des fichiers de classe, mais le programme le fera Lorsqu'une classe est nécessaire, elle est automatiquement "chargée dynamiquement".

Lors de la création d'un objet , utilisez new

② directement en utilisant un nom de classe (exploitant les propriétés et méthodes statiques)


Utilisez la fonction magique de chargement automatique

Lorsque deux situations se produisent, cette fonction sera appelée, Cette fonction nous oblige à la définir à l'avance et à rédiger une instruction générale pour le chargement des fichiers de classe

function autoload($name){
  require './lib/'.$name.'.class.php';
}


Utiliser spl_autoload_register()

Utilisez-le pour enregistrer (déclarer) plusieurs fonctions qui peuvent remplacer autoload() Naturellement, vous devez définir ces fonctions, et les fonctions des fonctions sont les mêmes que autoload(), mais vous pouvez. traiter davantage en ce moment. Situation

//注册用于自动加载的函数
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')
);

Application du scénario du projet

//自动加载
//控制器类 模型类 核心类
//对于所有的类分为可以确定的类以及可以扩展的类
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';
  }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn