spl_autoload_register()
PHP가 스택 / 큐에 넣고 "새 클래스"가 선언 될 때 순차적으로 호출 할 여러 함수 (또는 자체 Autoload 클래스의 정적 메소드)를 등록 할 수 있습니다.
예를 들어 :
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
위의 예에서 "MyClass"는 인스턴스화하려는 클래스의 이름입니다. PHP는이 이름을 문자열로 전달 spl_autoload_register()
하여 변수를 선택하고 해당 클래스 / 파일을 "포함"하는 데 사용할 수 있습니다. . 결과적으로 include / require 문을 통해 해당 클래스를 포함시킬 필요가 없습니다 ...
위의 예제와 같이 인스턴스화하려는 클래스를 호출하기 만하면 spl_autoload_register()
모든 클래스가있는 위치를 알아내는 자체 함수를 통해 등록했기 때문에 PHP는 해당 함수를 사용합니다.
사용하는 이점은 작성하는 모든 파일에서 자동로드 기능을 구현할 필요가없는 spl_autoload_register()
것과 다릅니다 __autoload()
. spl_autoload_register()
또한 여러 자동로드 기능을 등록하여 자동로드 속도를 높이고 훨씬 쉽게 만들 수 있습니다.
예:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
spl_autoload 와 관련 하여 수동 상태는 다음과 같습니다.
이 함수는의 기본 구현으로 사용됩니다 __autoload()
. 다른 사항을 지정 spl_autoload_register()
하지 않고 매개 변수없이 호출하면이 함수는 나중에 호출 할 때 사용됩니다 __autoload()
.
좀 더 실용적인 용어로, 모든 파일이 단일 디렉토리에 있고 응용 프로그램이 .php 파일뿐만 아니라 확장명이 .inc 인 사용자 정의 구성 파일을 사용하는 경우, 하나의 전략으로 모든 파일을 포함하는 디렉토리를 추가하는 것입니다 PHP의 파일에 포함 경로 (를 통해 set_include_path()
).
또한 구성 파일도 필요하므로 spl_autoload_extensions()
PHP가 찾고자하는 확장명을 나열하는 데 사용 합니다.
예:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
spl_autoload는 __autoload()
magic 메소드 의 기본 구현이므로 새 클래스를 인스턴스화하고 인스턴스화 할 때 PHP는 spl_autoload를 호출합니다.
도움이 되었기를 바랍니다...