>백엔드 개발 >PHP 튜토리얼 >spl_autoload_register 함수에 대한 자세한 설명

spl_autoload_register 함수에 대한 자세한 설명

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-07-28 08:26:56933검색

이 기능을 이해하기 전에 __autoload라는 또 다른 기능을 살펴보겠습니다.

1.__autoload

PHP5에서는 정의되지 않은 클래스를 인스턴스화할 때 이 함수가 실행됩니다. 다음 예를 살펴보세요.

printit.class.php 

 

<?php

class PRINTIT {

function doPrint() {

echo 'hello world';

}

}

?> 

 

index.php 

 

<?

function __autoload( $class ) {

$file = $class . '.class.php';

if ( is_file($file) ) {

require_once($file);

}

}

$obj = new PRINTIT();

$obj->doPrint();

?>

index.php 실행 후 안녕하세요. 월드가 정상적으로 출력됩니다. index.php에는 printit.class.php가 포함되어 있지 않기 때문에 printit을 인스턴스화할 때 자동으로 __autoload 함수가 호출되는데, $class 매개변수의 값은 클래스 이름인 printit이다. .

이 방법은 너무 많은 참조 파일을 작성하는 것을 방지하고 전체 시스템을 보다 유연하게 만들 수 있는 객체 지향에서 자주 사용됩니다.

2.spl_autoload_register()

spl_autoload_register()를 다시 살펴보세요. 이 함수는 __autoload와 동일한 효과를 갖습니다.

  

 

<?

function loadprint( $class ) {

$file = $class . '.class.php';

if (is_file($file)) {

require_once($file);

}

}

spl_autoload_register( 'loadprint' );

$obj = new PRINTIT();

$obj->doPrint();

?>

__autoload를 loadprint 함수로 바꿉니다. 그러나 loadprint는 __autoload처럼 자동으로 실행되지 않습니다. 이때 spl_autoload_register()는 정의되지 않은 클래스를 발견하면 PHP에 loadprint()를 실행하도록 지시합니다.

spl_autoload_register()는 정적 메소드를 호출합니다

  

 

<?

class test {

public static function loadprint( $class ) {

$file = $class . '.class.php';

if (is_file($file)) {

require_once($file);

}

}

}

spl_autoload_register( array('test','loadprint') );

//另一种写法:spl_autoload_register( "test::loadprint" );

$obj = new PRINTIT();

$obj->doPrint();

?>

이상으로 spl_autoload_register 함수에 대한 자세한 설명을 관련 내용을 포함하여 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.