ThinkPHP 프레임워크를 사용할 때 소스 코드를 보면 __autoload와 apl_autoload_register라는 두 가지 함수를 볼 수 있는데, 이 두 함수는 자동 로딩에 사용됩니다. 주요 기능은 소스 코드 파일이 로드되지 않은 파일을 사용할 때 이 두 함수가 실행되어 언로드된 파일을 로드하는 것입니다. PHP의 __autoload 함수는 이 함수가 나타나기 전에는 마법의 함수입니다. 파일이 100개의 개체를 참조하면 이 파일은 100개의 클래스 파일을 포함하거나 도입해야 하므로 PHP 파일이 매우 커집니다. 그래서 이 __autoload 함수가 있습니다.
__autoload 함수는 언제 호출되나요?
#Animal.php<?php class Animal{}?>
#main.php<?php function __autoload($classname){ $classpath = "{$classname}.php"; if(file_exists($classpath)){ require_once($classpath); }else{ echo $classpath." not be found!"; } } $ani = new Animal();?>
위 두 파일처럼 php main.php를 실행하세요
(1) 다음으로 실행 new Animal() 클래스가 정의되지 않은 것으로 나타났습니다.(2)는 Animal.php 파일을 도입한 __autoload 함수를 트리거했습니다.
(3) 인스턴스화에 성공했습니다.
자, 이제 __autoload 함수의 역할을 이해했으니 spl_autoload_register 함수의 역할을 살펴보겠습니다.
spl_autoload_register 함수의 역할은 사용자 정의 함수 설정을 __autoload 함수로 바꾸는 것입니다(참고: __autoload와 spl_autoload_register가 파일에 동시에 나타나면 spl_autoload_register가 우선합니다).
그런 다음 main.php를 다음과 같이 변경하면 동일한 효과:
#main.php<?php function myLoad($classname){ $classpath = "{$classname}.php"; if(file_exists($classpath)){ require_once($classpath); }else{ echo $classpath." not be found!"; } } spl_autoload_register("myLoad"); $ani = new Animal();?>
__autoload 함수는 언제 호출되나요?
객체를 인스턴스화하기 위해 PHP 파일에서 new 키워드를 사용할 때, 이 PHP 파일에 클래스가 정의되어 있지 않으면 __autoload 함수가 트리거됩니다. 이때 클래스를 정의하는 PHP 파일이 도입될 수 있습니다. 그런 다음 인스턴스화가 성공합니다. (참고: 이 파일에서 인스턴스화해야 할 객체가 발견되고 클래스 정의가 발견되면 __autoload 함수가 실행되지 않습니다.)
#Animal.php<?php class Animal{}?>
#main.php<?php function __autoload($classname){ $classpath = "{$classname}.php"; if(file_exists($classpath)){ require_once($classpath); }else{ echo $classpath." not be found!"; } } $ani = new Animal();?>
(2)는 Animal.php 파일을 도입한 __autoload 함수를 트리거했습니다.
(3) 인스턴스화에 성공했습니다.자, 이제 __autoload 함수의 역할을 이해했으니 spl_autoload_register 함수의 역할을 살펴보겠습니다.
spl_autoload_register 함수의 역할은 사용자 정의 함수 설정을 __autoload 함수로 바꾸는 것입니다. (참고: __autoload와 spl_autoload_register가 파일에 동시에 나타나면 spl_autoload_register가 우선합니다.)
그런 다음 main.php를 다음과 같이 변경하면 같은 효과:
#main.php<?php function myLoad($classname){ $classpath = "{$classname}.php"; if(file_exists($classpath)){ require_once($classpath); }else{ echo $classpath." not be found!"; } } spl_autoload_register("myLoad"); $ani = new Animal();?>
위 내용은 두 가지 PHP 자동 로딩 기능에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!