PHP에 네임스페이스를 추가하면 자동 로딩이 쉬워진다는 장점이 있습니다.

不言
풀어 주다: 2023-03-25 11:08:02
원래의
1512명이 탐색했습니다.

이 글에서는 자동 로딩을 용이하게 하기 위해 PHP에 네임스페이스를 추가할 때의 이점을 주로 소개합니다. 이제는 모든 사람과 공유합니다. 필요한 친구가 참조할 수 있습니다.

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

spl_autoload_register(function ($className) {    require 'class/' . $className . '.php';});通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。在引入命名空间之前:
로그인 후 복사

우리 프로젝트 디렉토리

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 namespace ;  。这样,我们在写自动加载的时候,就不用考虑将要加载的类在哪一个文件目录下了,只需要这样写:

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

相关推荐:

无需重新编译php加入ftp扩展的方法

PHP加入数据程序的具体实现方法

위 내용은 PHP에 네임스페이스를 추가하면 자동 로딩이 쉬워진다는 장점이 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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