이 글은 주로 PHP의 객체지향 자동 로딩 메커니즘의 원리와 사용법을 소개하며, PHP의 객체지향 자동 로딩 메커니즘의 원리와 관련 기능, 주의사항을 예제 형식으로 분석합니다.
PHP의 방향을 배우면서 객체로 작업할 때 "syntax sugar", 즉 매직 메소드를 많이 알게 됩니다. 자동 로딩을 추가하는 마법의 메소드가 있습니다: __autoload();
먼저 코드를 살펴보세요
<?php function __autoload($classname) { $filename = "./". $classname .".php"; include_once($filename); } new a();
여기서 클래스 A가 인스턴스화되지만 클래스 A와 관련된 코드는 없습니다. 코드블럭을 눌러보세요. 해당 클래스 A가 없기 때문에 에러를 보고해야 한다는 것이 상식이지만, autoload() 자동 로딩 기능을 사용하면 결과가 달라질 수 있습니다
위의 흐름도에서 : 페이지에서 하나를 인스턴스화합니다. 새 클래스의 경우 먼저 현재 디렉터리에서 해당 클래스 코드를 찾습니다. 존재하지 않으면 자동 로드 스택으로 이동하여 해당 자동 로딩 기능을 찾습니다. , 자동으로 클래스를 로드합니다. 그렇지 않으면 오류가 발생합니다.
이것은 PHP 자동 로딩 메커니즘입니다. 그러면 초점은 뒤쪽에 있습니다. 자동 로드된 기능이 여러 개 있으면 어떻게 되나요?
PHP는 SPL 기능을 제공합니다
spl_autoload_register(); // 注册autoload函数
공식: spl_autoload_register()는 클래스 자동 로딩을 구현하는 보다 유연한 방법을 제공합니다. 따라서 __autoload() 함수의 사용은 더 이상 권장되지 않으며 향후 버전에서는 더 이상 사용되지 않을 수 있습니다.
그러나 이 기능은 PHPexecl과 PHPWord 모두에서 자동 로딩을 위해 사용되는데 둘 사이에는 차이점이 있습니다! !
PHPexecl 자동 로딩 방법 (여기 작성자는 아마도 Python 엔지니어일 것입니다. 그렇지 않으면 중괄호가 없으며 들여쓰기로 표시됩니다)
public static function Register() { $functions = spl_autoload_functions(); foreach ( $functions as $function) spl_autoload_unregister($function); $functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions); foreach ( $functions as $function) $x = spl_autoload_register($function); return $x; }
PHPWord 자동 로딩 방법
public static function Register() { return spl_autoload_register(array('PHPWord_Autoloader', 'Load')); }
이 두 가지 방법을 사용하여 자동 로딩을 재정의할 수 있지만 차이점이 있습니까? 코드가 독립적으로 실행되는 경우 두 경우 모두 실행될 수 있지만 YII 프레임워크와 같은 프레임워크에 통합된 경우입니다. 그러면 PHPWord의 자동 로딩이 유효하지 않습니다.
YII 프레임워크에는 자동 로딩 기능이 자동으로 제공되고 코드가 실행될 때 이미 등록되어 있으며 spl_autoload_register()는 자동 로드 대기열 뒤에 새로운 자동 로딩 기능을 로드하기 때문입니다. 모든 PHPWord가 실행 중일 때 YII 프레임워크에서 정의한 자동 로딩 메커니즘을 호출하며 이는 PHPWord의 로딩 방법이 아닙니다.
그래서 PHPexecl의 로딩 기능을 보시면 이해가 되실 겁니다.
요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.
관련 권장 사항:
기본 DOM 개체 조작 XML을 구현하는 PHP 방법위 내용은 PHP 객체지향 자동 로딩 메커니즘 원리 및 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!