Detaillierte Erläuterung der Beispiele für das automatische Laden von PHP

零下一度
Freigeben: 2023-03-13 09:46:01
Original
1780 Leute haben es durchsucht

Ein PHP-Projekt hat normalerweise nur eine Eintragsdatei index.php. Wir schreiben normalerweise eine automatische Ladefunktion in diese Eintragsdatei, um Klassendateien zu erfordern, die in Zukunft instanziiert werden. Zum Beispiel:

<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>
Nach dem Login kopieren

Unser Projektverzeichnis

index.php

Controller .php

In index.php müssen wir eine Controller-Klasse im Controller-Verzeichnis instanziieren und die model()-Methode dieses Objekts aufrufen, und diese Methode muss eine Modellmodellklasse instanziieren im Verzeichnis. Lassen Sie uns index.php ausführen:

Warnung: require(controller/Model.php): failed to open stream: No such file or Verzeichnis

Es heißt, dass es keine solche Datei oder kein solches Verzeichnis gibt. Der Grund ist ganz einfach: Wenn PHP new Model() verwendet, wechselt es automatisch in das erforderliche Controller-Verzeichnis und kann daher nicht gefunden werden.

Wie sollte also unsere automatische Ladefunktion geschrieben werden, um das Problem zu lösen? Wenn Sie „controller/“ in „model/“ ändern oder das Verzeichnis nicht schreiben, wird es offensichtlich nicht richtig geladen. Daher ergeben sich die Vorteile der Verwendung von Namespaces.

引入命名空间之后:
Nach dem Login kopieren

index.php

Controller.php

Model.php

Wir schreiben den Namespace für jede Klasse gemäß der Dateiverzeichnisstruktur. Wenn wir eine andere Klasse in einer Klasse instanziieren müssen, hilft uns die IDE beim Schreiben 🎜> Namensraum ; Auf diese Weise müssen wir beim Schreiben des automatischen Ladens nicht berücksichtigen, in welchem ​​Dateiverzeichnis sich die zu ladende Klasse befindet. Wir müssen nur so schreiben:

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Beispiele für das automatische Laden von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage