php_php 스킬의 spl_autoload에 대한 자세한 설명
SPL에는 spl_autoload와 spl_autoload_call이라는 두 가지 서로 다른 함수가 있습니다. autoload_func를 이 두 가지 함수 주소로 지정하여 서로 다른 자동 로딩 메커니즘을 구현합니다.
spl_autoload는 SPL에서 구현한 기본 자동 로딩 기능이며, 그 기능은 비교적 간단합니다. 두 개의 매개변수를 받을 수 있습니다. 첫 번째 매개변수는 클래스 이름을 나타내는 $file_extensions입니다. 두 번째 매개변수인 $file_extensions는 클래스 파일의 확장명을 나타냅니다. $file_extensions" title="Extension">확장자 이름에 여러 확장자를 지정하세요. 세미콜론으로 구분하세요. 지정하지 않으면 기본 확장자" title="Extension name"> 확장자를 사용합니다. .spl_autoload는 먼저 $class_name을 소문자로 변경한 다음 모든 포함 경로에서 $class_name.inc 또는 $class_name.php 파일을 검색합니다($file_extensions 매개변수가 지정되지 않은 경우). 발견되면 클래스 파일을 수동으로 로드할 수 있습니다. Person 클래스를 로드하려면 spl_autoload("Person", ".class.php")를 사용하십시오. 실제로 여러 확장을 지정할 수 있다는 점을 제외하면 require/include와 유사합니다.
spl_autoload가 자동으로 작동하도록 하는 방법, 즉 autoload_func에서 spl_autoload를 지정하는 방법은 무엇입니까? 대답은 spl_autoload_register 함수를 사용하는 것입니다. 매개 변수 없이 PHP 스크립트에서 처음으로 spl_autoload_register()를 호출하면 autoload_func에서 spl_autoload를 지정할 수 있습니다.
위의 설명을 통해 spl_autoload의 기능은 비교적 간단하고 SPL 확장에 구현되어 있으며 해당 기능을 확장할 수 없다는 것을 알 수 있습니다. 보다 유연한 자동 로딩 메커니즘을 구현하고 싶다면 어떻게 해야 할까요? 이때 spl_autoload_call 기능이 데뷔합니다.
먼저 spl_autoload_call 구현의 놀라운 기능을 살펴보겠습니다. SPL 모듈 내부에는 본질적으로 HashTable인 전역 변수 autoload_functions가 있지만 간단히 연결 목록으로 생각할 수 있습니다. 연결 목록의 각 요소는 다음과 같은 기능을 가진 함수를 가리키는 함수 포인터입니다. 자동으로 클래스를 로드하는 기능입니다. spl_autoload_call 구현 자체는 매우 간단하며, 단순히 연결 리스트에 있는 각 함수를 순서대로 실행한 후, 필요한 클래스가 로드되었는지 판단하여 로딩에 성공하면 바로 반환을 하게 됩니다. 연결된 목록의 다른 기능을 계속 실행합니다. 이 연결된 목록의 모든 함수가 실행된 후에도 클래스가 로드되지 않은 경우 spl_autoload_call은 사용자에게 오류를 보고하지 않고 직접 종료됩니다. 따라서 자동 로드 메커니즘을 사용한다고 해서 클래스가 자동으로 올바르게 로드되는 것은 아닙니다. 핵심은 여전히 자동 로드 기능이 구현되는 방식에 따라 달라집니다.
php5의 표준 라이브러리 메소드 spl_autoload는 자체 __autoload를 구현하는 것과 동일합니다
함수 __autoload($classname){
If(is_file($classname.'.php'){
$classname.'.php';
포함 } elseif(is_file($classname.'.inc'){
$classname.'.inc' 포함;
}
}
등록 디렉토리에서 $classname과 동일한 이름을 가진 .php/.inc 파일을 자동으로 찾습니다. 물론
확장자를 등록하여 특정 유형의 파일을 지정할 수도 있습니다.spl_autoload_extensions('.php,.inc,.some');
이렇게 하면 .some 파일도 검색됩니다. 기본적으로 PHP는 spl_autoload를 시작하지 않습니다. 그러면 어떻게 자동으로 spl_autoload를 적용할 수 있습니까? 방법은
spl_autoload_register();
spl_autoload_register에는 $callback 매개변수가 있습니다. 지정하지 않으면 자동으로 spl_autoload를 등록하여 더 많은 자동 로딩 디렉터리를 검색할 수 있으며, 이 코드 앞에 자동 로딩 디렉터리를 설정할 수 있습니다.
이런 방식으로 PHP가 지정된 클래스를 찾을 수 없으면 set_include_path에 지정된 디렉터리에서 검색합니다.
이러한 방법은 PHP 프레임워크에서 일반적으로 사용됩니다. 예를 들어 위의 소개를 함께 연결해 보세요.
set_include_path(get_include_path() . PATH_SEPARATOR . 'some/path' . DIRECTORY_SEPARATOR);
spl_autoload_extensions('.php,.inc,.some');
spl_autoload_register();
some/path 아래에 classA 클래스를 로드하려는 경우 디렉토리에서 classa.php, classa.inc 또는 classa.some을 찾으므로 안전하게 새 classA를 사용하거나 classA를 확장할 수 있습니다.
ClassB는 ClassA를 확장합니다. {
// 코드..
}
$a = 새로운 ClassA;
$b = 새로운 클래스B;

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

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

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

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.
