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>
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.
引入命名空间之后:
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>
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!