이 글에서는 자동 로딩을 용이하게 하기 위해 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에 네임스페이스를 추가하면 자동 로딩이 쉬워진다는 장점이 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!