>  기사  >  백엔드 개발  >  PHP에 네임스페이스를 추가하면 자동 로딩이 쉬워진다는 장점이 있습니다.

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

不言
不言원래의
2018-05-04 10:20:181505검색

이 글에서는 자동 로딩을 용이하게 하기 위해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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