>  기사  >  백엔드 개발  >  PHP 클래스의 자동 로딩 동작 예시에 대한 자세한 설명

PHP 클래스의 자동 로딩 동작 예시에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-12-21 14:00:54925검색

이 기사의 예에서는 PHP 클래스의 자동 로딩 작업을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

클래스 자동 로딩

외부 페이지에서는 클래스 파일을 도입할 필요가 없지만 프로그램이 자동으로 클래스 파일을 로드합니다. 필요할 때 클래스 클래스의 "동적 로딩"으로 이동하세요.

① new 객체를 생성할 때

② 클래스 이름을 직접 사용(정적 속성 및 메서드 조작)

__autoload 매직 기능 사용

두 가지 상황이 발생하면 이 함수를 호출하려면 미리 정의하고 클래스 파일을 로드하기 위한 일반 문을 작성해야 합니다.

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 중국어 홈페이지 관련 글을 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.