PHP 프레임워크에서 클래스를 자동으로 로드하는 파일 원리에 대한 자세한 설명

怪我咯
풀어 주다: 2023-03-10 14:12:02
원래의
1256명이 탐색했습니다.

이 글은 주로 PHP 프레임워크에 의한 클래스 파일 자동 로딩 원리를 소개합니다. 관심 있는 친구들이 참고할 수 있습니다.

설명: 회사 프로젝트 PHP는 중간 전달 레이어로 사용됩니다. http Request를 받고 소켓을 이용해 C++와 통신함), 코드가 프레임워크를 사용하지 않기 때문에 자연스럽게 이전 사람들이 작성한 것입니다. 최근 이 하단 레이어의 최적화가 필요해서 이 부분의 코드를 살펴보았습니다.

목적: 이 코드의 주요 기능은 메인 디렉터리에 있는 모든 플러그인 클래스를 한 번에 로드하는 것입니다. 아직 정의되지 않은 클래스와 인터페이스를 자동으로 로드합니다. 자동 로더를 등록하면 스크립팅 엔진은 PHP가 오류로 인해 실패하기 전에 필요한 클래스를 로드할 수 있는 마지막 기회를 갖게 됩니다.

구현 방법: 주로 PHP 함수 사용 __autoload()

세부 사항:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
set_include_path($_SERVER['Root_Path'] . '/libs' . PATH_SEPARATOR .
   $_SERVER['Root_Path'] . '/lib' . PATH_SEPARATOR .
   get_include_path() );
if (!function_exists('__autoload')) {
 function __autoload($className)
 {
 ///优化包含路径
 $path=_getRootPath($className);
 $revpath=strtr($className, '_', '/'). '.php';
 $rootpath=$path.$revpath;
 file_exists($rootpath)?include($rootpath):@include($revpath);
 }
}

/**
 *得到根路径*
 */
function _getRootPath($classname)
{
 $pearpath=$_SERVER["PHP_PEAR_PATH"].'/';
 $libpath=$_SERVER['Root_Path'] . '/lib/';
 $libspath=$_SERVER['Root_Path'] . '/libs/';

 if(strpos($classname,'Zend_')===0) return $pearpath; ///zend 框架路径
 if(strpos($classname,'DB_')===0 || strpos($classname,'Interface_')===0 || strpos($classname,'Others_')===0 || strpos($classname,'Pay_')===0 || strpos($classname,'PHPMailer_')===0 ) return $libspath;
 return $libpath;
}
로그인 후 복사

_getRootPath($classname) 함수는 클래스 이름에 따라 클래스 이름 파일이 있는 실제 디렉터리를 가져옵니다. 헤더 필드는 클래스가 어느 디렉터리에 있는지 결정합니다.

이 디렉터리에서 클래스를 찾을 수 있으면 사용하기 전에 클래스가 로드됩니다.

위 내용은 PHP 프레임워크에서 클래스를 자동으로 로드하는 파일 원리에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿