PHP에서 클래스 자동 로딩에 대한 자세한 설명

藏色散人
풀어 주다: 2023-04-09 18:16:02
앞으로
3434명이 탐색했습니다.

PHP에서 클래스 자동 로딩

이전에 우리는 PHP에서 클래스의 자동 로딩 기능을 실제로 활용하는 Composer 자동 로딩의 원리를 배웠습니다.

PHP에서 클래스 자동 로드는 주로 __autoload() 및 spl_autoload_register()라는 두 가지 메서드에 의존합니다.

오늘은 이 두 가지 방법의 사용법을 간략하게 살펴보겠습니다.

__autoload()

곧 사라질 마법의 메소드로서, 우리는 그것을 이해하면 됩니다. PHP7에서 이 메서드를 사용하면 오래된 경고가 보고되고 시스템에서는 spl_autoload_register() 메서드를 사용하도록 권장합니다.

function __autoload($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
}

$autoA = new AutoA();
var_dump($autoA);
로그인 후 복사

AutoA 클래스를 인스턴스화하면 현재 파일에는 이 클래스가 없으며 다른 파일을 포함하거나 요구하지 않습니다. 이때 자동으로 매직 메서드 __autoload()가 입력됩니다. __autoload() 메서드에서는 이 클래스가 있는 파일만 포함하면 됩니다.

spl_autoload_register()

이 메서드는 현재 위의 매직 메서드로 클래스를 자동으로 로드하는 기능을 대체했습니다. spl 확장 라이브러리의 메소드입니다. 이제 spl 확장 라이브러리가 기본적으로 PHP에 통합되어 안심하고 직접 사용할 수 있습니다.

__autoload()에 비해 spl_autoload_register()의 장점은 __autoload()를 등록하고 __autoload() 대기열을 구현 및 유지 관리할 수 있다는 것입니다. 원래는 파일에 하나의 __autoload() 메서드만 있을 수 있었지만 지금은 대기열만 있습니다.

이렇게 하면 하나의 __autoload() 메서드에 모든 로딩 코드를 작성할 필요가 없지만 여러 spl_autoload_register()를 사용하여 각 클래스를 개별적으로 로드할 수 있습니다.

spl_autoload_register(function($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
});

$autoA = new AutoA();
var_dump($autoA);
로그인 후 복사

참고: Composer 원리 심층 연구(2)

include 또는 include_once 사용

자동 로딩에서는 include만 사용하면 되며 클래스가 반복적으로 로딩되지 않습니다.

spl_autoload_register(function($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
    echo $name, PHP_EOL;
});

$autoA = new AutoA();
var_dump($autoA);

$autoA = new AutoA();
var_dump($autoA);

$autoA = new AutoA();
var_dump($autoA);

$autoB = new AutoB();
var_dump($autoB);
로그인 후 복사

코드를 보면 클래스가 여러 번 인스턴스화될 때 $name이 한 번만 출력되는 것을 볼 수 있습니다. 따라서 클래스 파일을 반복적으로 로드하는 문제에 대해 걱정할 필요가 없습니다. 게다가 대규모 프레임워크에서 Composer를 사용하는 경우 많은 클래스가 로드되며, _once 메서드도 효율성 문제를 야기합니다.

위 내용은 PHP에서 클래스 자동 로딩에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿