PHP 자동 로딩 예제에 대한 자세한 설명

零下一度
풀어 주다: 2023-03-13 09:46:01
원래의
1780명이 탐색했습니다.

PHP 프로젝트에는 일반적으로 항목 파일 index.php가 하나만 있습니다. 일반적으로 나중에 인스턴스화될 클래스 파일을 요구하기 위해 이 항목 파일에 자동 로딩 기능을 작성합니다. 예:

<span style='font-family: "courier new", courier; font-size: 14px'>spl_autoload_register(function ($className) {</span><br><span style='font-family: "courier new", courier; font-size: 14px'>    require 'class/' . $className . '.php';</span><br><span style='font-family: "courier new", courier; font-size: 14px'>});</span><br><br><span style='font-family: "Microsoft YaHei"; font-size: 14px'>通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。</span><br><br><strong><span style="font-size: 18px; background-color: #339966">在引入命名空间之前:</span></strong>
로그인 후 복사

우리 프로젝트 디렉토리

index.php

Controller.php

index.php 컨트롤러 디렉터리에서 Controller 클래스를 인스턴스화하고 이 개체의 model() 메서드를 호출해야 하며, 이 메서드는 모델 디렉터리에서 Model 클래스를 인스턴스화해야 합니다. index.php를 실행해 보겠습니다.

Warning: require(controller/Model.php): failed to open stream: No such file ordirectory

은 해당 파일이나 디렉터리가 없다는 메시지를 표시합니다. 그 이유는 매우 간단합니다. PHP가 new Model()을 사용할 때 자동으로 require가 필요한 컨트롤러 디렉토리로 이동하므로 찾을 수 없습니다.

그렇다면 이 문제를 해결하려면 자동 로딩 기능을 어떻게 작성해야 할까요? 분명히 'controller/'를 'model/'로 변경하거나 디렉토리를 쓰지 않으면 제대로 로드되지 않습니다. 따라서 네임스페이스를 사용하면 이점이 나타납니다.

引入命名空间之后:
로그인 후 복사

index.php

Controller.php

Model.php

우리는 파일 디렉토리를 따릅니다 클래스에서 다른 클래스를 인스턴스화해야 하는 경우 IDE는 use 네임스페이스 ;를 작성하는 데 도움이 됩니다. 이렇게 하면 자동 로딩을 작성할 때 로드할 클래스가 어느 파일 디렉터리에 있는지 고려할 필요가 없습니다. 다음과 같이 작성하면 됩니다:

<span style='font-family: "courier new", courier; font-size: 14px'>spl_autoload_register(function ($class) {</span><br><span style='font-family: "courier new", courier; font-size: 14px'>    require $class . '.php';</span><br><span style='font-family: "courier new", courier; font-size: 14px'>});</span><br><br><span style='font-family: "Microsoft YaHei"; font-size: 14px'>因为我们在index.php中use了所用到的类的命名空间,自动加载函数会到相应的命名空间中去寻找类(上述代码中的$class就相当于是'controller\Controller'),而这些类中又需要实例化其他的类,因为这些类中也声明了use <em>其他类的命名空间 </em>;,所以自动加载函数又会去相应的命名空间中去require其他类。</span><br><br><span style='font-size: 16px; font-family: "Microsoft YaHei"'>这样,我们就不会为加载类而发愁了,极大地解放了我们的编程负担。</span>
로그인 후 복사

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

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