이 글은 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!