참고링크:
1. spl_autoload_register와 autoload의 차이점에 대한 자세한 설명
2.php.net 자동 로딩 클래스
객체 지향 애플리케이션을 작성할 때 많은 개발자는 각 클래스 정의에 대해 PHP 소스 파일을 만듭니다. 각 스크립트의 시작 부분에 포함 파일의 긴 목록(클래스당 하나의 파일)을 작성해야 한다는 점은 큰 성가신 일입니다.
PHP 5에서는 더 이상 필요하지 않습니다. 아직 정의되지 않은 클래스를 사용하려고 할 때 자동으로 호출되는 __autoload() 함수를 정의할 수 있습니다. 이 함수를 호출하면 스크립팅 엔진은 PHP가 오류로 인해 실패하기 전에 필요한 클래스를 로드할 수 있는 마지막 기회를 갖게 됩니다.
간단한 가져오기 예:
먼저 새 클래스 파일 MyClass.class.php를 만듭니다.
<?php class MyClass { public function __construct() { echo "This is MyClass's construct"; } }
같은 디렉토리에 원하는 이름으로 새 PHP 파일을 만듭니다.
<?php function __autoload($cls){ var_dump($cls); require './'.$cls.".class.php"; } $o1 = new MyClass(); // 这里不会再执行__autoload了,因为这个类已经require进来了。只有在当前文件中找不到该类的时候才会调用__autoload函数 $o2 = new MyClass();
여기서 필수 콘텐츠는 __autoload()에 배치됩니다. 이 함수가 정의되지 않으면 MyClass 클래스를 찾을 수 없음을 나타내는 치명적인 오류(Fatal)가 보고됩니다.
이 매직 메소드를 정의하면 새 객체가 발견되고 현재 코드에서 클래스 정의를 찾을 수 없는 경우(위의 두 조건이 충족됨) __autoload() 함수가 클래스 매개변수를 지정하고 함수 코드 세그먼트를 실행합니다.
따라서 var_dump("MyClass"); 및 require './MyClass.class.php';
가 함수에서 실행됩니다.
결과는 다음과 같습니다.
string(7) "MyClass" This is MyClass's constructThis is MyClass's construct
여기에는 var_dump의 내용이 1회, 생성자 echo의 내용이 2회 출력됩니다. require가 들어오고 new MyClass가 다시 생성되면 __autoload() 함수가 다시 호출되지 않는다는 것을 증명할 수 있습니다.
자동 로드에는 단점이 있습니다. 반복적으로 정의할 수 없기 때문에(PHP 언어의 특성) 팀 개발을 수행할 경우 불편하고 충돌이 발생하기 쉽습니다.
PHP 5.1.2 이후에는 자동 로드 등록 함수 spl_autoload_register가 있습니다. 다음은 이 함수에 대한 몇 가지 지침입니다.
SPL __autoload 함수 대기열에 함수를 등록합니다. 아직 활성화되지 않은 경우 이 대기열의 기능을 활성화하십시오.
여러 자동 로드 기능이 필요한 경우 spl_autoload_register()가 이러한 요구 사항을 충족합니다. 실제로 자동 로드 기능의 대기열을 생성하고 정의된 순서대로 하나씩 실행합니다. 반면 __autoload()는 한 번만 정의할 수 있습니다.
PHP 5.3에 네임스페이스가 도입된 이후 이 함수의 매개변수는 다양한 형태를 갖게 되었습니다.
spl_autoload_register('my_autoloader'); // my_autoloader是一个函数名 spl_autoload_register(array('Loader', 'loadClass')); // 表示类内的静态方法,Loader::loadClass // 或者,自 PHP 5.3.0 起可以使用一个匿名函数 spl_autoload_register(function ($class) { include 'classes/' . $class . '.class.php'; }); spl_autoload_register(__NAMESPACE__ .'\Foo::test'); // 自 PHP 5.3.0 起,可以使用命名空间的形式
이 함수는 새 객체 이전에만 호출하면 됩니다.
다음은 예시입니다(위의 4가지 형식 테스트).
<?php // namespace Atl; // 加了这句话报错了! function my_autoloader($cls){ echo "<br/>$cls - my_autoloader <br/>"; require_once './MyClass1.class.php'; } class Loader{ public static function loadClass($cls){ echo "<br/>$cls - Loader::loadClass <br/>"; require_once './MyClass2.class.php'; } public static function nspClass($cls){ echo "<br/>$cls - Loader::nspClass <br/>"; require_once './MyClass3.class.php'; } } spl_autoload_register('my_autoloader'); $o1 = new MyClass1(); spl_autoload_register(array('Loader', 'loadClass')); $o2 = new MyClass2(); // 版本检测 if(version_compare(PHP_VERSION, '5.3.0', '<')) die("以下的两个测试需要PHP 5.3及以上"); spl_autoload_register(__NAMESPACE__ .'\Loader::nspClass'); $o3 = new MyClass3(); spl_autoload_register(function ($cls) { echo "<br/>$cls - anonymous function <br/>"; require_once './MyClass4.class.php'; }); $o4 = new MyClass4();
출력된 결과는 다음과 같습니다. (검색 순서는 등록 순서와 동일하니 참고하세요)
MyClass1 - my_autoloader This is MyClass1's construct MyClass2 - my_autoloader MyClass2 - Loader::loadClass This is MyClass2's construct MyClass3 - my_autoloader MyClass3 - Loader::loadClass MyClass3 - Loader::nspClass This is MyClass3's construct MyClass4 - my_autoloader MyClass4 - Loader::loadClass MyClass4 - Loader::nspClass MyClass4 - anonymous function This is MyClass4's construct

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

드림위버 CS6
시각적 웹 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
