spl_autoload_register 와 autoload 의 차이 에 대한 상세 한 설명

spl_autoload_register(PHP 5 >= 5.1.2)spl_autoload_register―등록autoload()함수 설명 bool splautoload_register ([ callback $autoload_function])함 수 를 SPL 에 등록autoload 함수 스 택 에 있 습 니 다.이 스 택 의 함수 가 활성화 되 지 않 았 다 면 활성화 합 니 다.만약 당신 의 프로그램 에서 이미 실현 되 었 다 면autoload 함수, 에 명시 적 으로 등록 해 야 합 니 다.autoload 스 택 에 있 습 니 다.spl 때문에autoload_register()함 수 는 Zend Engine 의 를autoload 함수 가 spl 로 대 체 됩 니 다.autoload()또는 splautoload_call()。파라미터 autoloadfunction 등록 하고 자 하 는 자동 적재 함수 입 니 다.인자 가 제공 되 지 않 으 면 자동 으로 autoload 의 기본 구현 함수 spl 을 등록 합 니 다.autoload()。반환 값 이 성공 하면 TRUE 로,실패 하면 FALSE 로 돌아 갑 니 다.주:SPL 은 Standard PHP  Library(표준 PHP 라 이브 러 리)의 줄 임 말.이것 은 PHP 5 가 도입 한 확장 라 이브 러 리 로 그 주요 기능 은 autoload 메커니즘 의 실현 과 각종 Iterator 인터페이스 나 클래스 를 포함한다.SPL  autoload 메커니즘 의 실현 은 함수 포인터 autoload 를 통 해func 는 자신 이 실현 하 는 자동 적재 기능 을 가 진 함 수 를 가리 키 며 이 루어 집 니 다.SPL 은 두 개의 서로 다른 함수 spl 가 있 습 니 다.autoload,  spl_autoload_call,autoloadfunc 는 이 두 개의 서로 다른 함수 주 소 를 가리 키 며 서로 다른 자동 로드 메커니즘 을 실현 합 니 다.범례 는 우리 에 게 A.php 파일 이 있 는데 그 안에 A 라 는 클래스 가 정의 되 어 있 습 니 다.

<?php
class A
{
public function __construct()
{
echo 'Got it.';
}
}
그리고 우 리 는 index.php 가 이 클래스 A 를 사용 해 야 합 니 다.일반적인 표기 법 은

<?php
require('A.php');
$a = new A();
입 니 다.그러나 한 가지 문 제 는 우리 의 index.php 가 포함 해 야 하 는 것 이 클래스 A 가 아니 라 여러 가지 종류 가 필요 합 니 다.그러면 반드시 많은 줄 require 문 구 를 써 야 합 니 다.가끔 기분 나 쁠 때 도 있어 요.그러나 php 5 이후 버 전에 서 는 더 이상 이렇게 할 필요 가 없습니다.php 5 에서 정의 되 지 않 은 클래스 를 사용 하려 고 할 때 자동 으로 autoload 함 수 를 호출 합 니 다.따라서 저 희 는 를 작성 할 수 있 습 니 다.autoload 함 수 는 php 가 자동 으로 클래스 를 불 러 올 수 있 도록 합 니 다.긴 파일 목록 을 쓸 필요 가 없습니다.예 를 들 어 위의 예 에서 index.php 는 이렇게 쓸 수 있다.

<?php
function __autoload($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
$a = new A();
물론 위 에 서 는 가장 간단 한 시범 일 뿐이다.autoload 는 include 만 갑 니 다.path 클래스 파일 을 찾 아 불 러 옵 니 다.필요 에 따라 정의 할 수 있 습 니 다autoload 로드 클래스 의 규칙 입 니 다.또한,우리 가 자동 으로 불 러 오고 싶 지 않 을 때 호출autoload 가 아니 라 우리 자신의 함수(또는 클래스 방법)를 호출 합 니 다.우 리 는 spl 을 사용 할 수 있 습 니 다.autoload_register 는 우리 자신의 autoload 함 수 를 등록 합 니 다.그것 의 함수 원형 은 다음 과 같다:bool splautoload_register ( [callback $autoload_function])우 리 는 위 에 있 는 예 를 계속 바 꾸 었 다.

<?php
function loader($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
spl_autoload_register('loader');
$a = new A();
이렇게 해도 정상적으로 작 동 할 수 있다.이때 phop 은 종 류 를 찾 을 때 호출 되 지 않 았 다.autoload 가 아니 라 우리 가 정의 한 함수 loader 를 호출 했 습 니 다.같은 이치 로 아래 의 이런 문법 도 괜찮다.

<?php  
class Loader  
{  
public static function loadClass($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}  
}  
spl_autoload_register(array('Loader', 'loadClass'));  
$a = new A();

좋은 웹페이지 즐겨찾기