Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der Anwendungsbeispiele für das automatische Laden von PHP-Autoload

Zusammenfassung der Anwendungsbeispiele für das automatische Laden von PHP-Autoload

伊谢尔伦
伊谢尔伦Original
2017-07-01 09:43:141061Durchsuche

Wenn wir Klassen in PHP verwenden, müssen wir sie vor der Verwendung laden, sei es über „require“ oder „include“, aber es gibt zwei Probleme, die unsere Entscheidung zum Laden beeinflussen

In PHP wird Autoload bereitgestellt, um uns das einfache Einbinden zu erleichtern Dateien, aber Autoload ist nicht in der Lage, alle Situationen wie gedacht zu bewältigen. Heute werden wir einige der Probleme mit Autoload aufzeichnen, auf die wir vor ein paar Tagen gestoßen sind.

Warum Autoload verwenden?

Wenn wir Klassen in PHP verwenden, müssen wir sie vor der Verwendung laden, sei es über die Methode „require“ oder „include“, aber das ist der Fall zwei Probleme sein, die unsere Entscheidung zum Laden beeinflussen.

Das erste ist, dass ich nicht weiß, wo diese Klassendatei gespeichert ist, und das andere ist, dass ich nicht weiß, wann ich diese Datei verwenden muss. Insbesondere wenn viele Projektdateien vorhanden sind, ist es unmöglich, am Anfang jeder Datei eine lange Anforderungszeichenfolge zu schreiben ...

Nach PHP5 können wir dieses Problem durch Autoload lösen. Und nach PHP5.1 wird auch spl_autoload_register() bereitgestellt, um einen umfassenderen Lademechanismus bereitzustellen.

Nachdem ich den Artikel Autoload in PHP gelesen habe, verstehe ich den Lademechanismus von Autoload. Wenn eine Klasse über new instanziiert wird, lädt PHP die entsprechende Datei über die definierte Autoload-Funktion. Wenn Sie erweitert oder implementiert und muss andere Klassendateien verwenden, führt PHP Autoload erneut aus, um die Klassendateien zu suchen und zu laden. Wenn es zwei Anfragen für dieselbe Klassendatei gibt, wird ein Fehler gemeldet. Der Autor des Originalartikels hat zur Veranschaulichung dieses Problems drei interessante Beispiele bereitgestellt, die durch Herunterladen des Quellcodes hier angezeigt werden können.

Im Allgemeinen gibt es viele Möglichkeiten, das Problem zu lösen, Dateien beim Laden am entsprechenden Speicherort zu finden. Die am häufigsten verwendete Methode ist die Angabe eines bestimmten Benennungsstandards.

Zends Methode

Zend empfiehlt eine der beliebtesten Methoden, nämlich den Pfad in den Dateinamen aufzunehmen. Zum Beispiel das folgende Beispiel:

// Main.class

function autoload($class_name) {
$path = str_replace('_', DIRECTORY_SEPARATOR , $ class_name);
 require_once $path.'.php';

$temp = new Main_Super_Class(); Alle Unterstriche werden durch Trennzeichen ersetzt Pfadsymbol, im obigen Beispiel gehen wir zur Datei Main/Super/Class.php

Der Nachteil dieser Methode besteht darin, dass wir während des Codierungsprozesses genau wissen müssen, wo sich die Codedatei befinden soll , und weil

Der Dateipfad im Klassennamen fest codiert ist. Wenn wir die Ordnerstruktur ändern müssen, müssen wir alle Klassennamen manuell ändern.

Methode „Alle einschließen“

Wenn Sie sich in einer Entwicklungsumgebung befinden und nicht viel Wert auf Geschwindigkeit legen, ist dies sehr nützlich Verwenden Sie diese Methode. Praktisch. Indem Sie alle Klassendateien in einem oder mehreren bestimmten Ordnern ablegen und sie dann durchsuchen, um sie zu finden und zu laden.

Zum Beispiel:


Der Code lautet wie folgt:

<?php 
  $arr = array ( 
    &#39;Project/Classes&#39;, 
    &#39;Project/Classes/Children&#39;, 
    &#39;Project/Interfaces&#39; 
  );
  foreach($arr as $dir) { 
    $dir_list = opendir($dir);
    while ($file = readdir($dir_list)) { 
      $path = $dir.DIRECTORY_SEPARATOR.$file; 
      if(in_array($file, array(&#39;.&#39;, &#39;..&#39;)) || is_dir($path)) 
        continue;
      if (strpos($file, ".class.php")) 
        require_once $path; 
    } 
  } 
?>


Zugehörige Dateien und Speicherorte

Eine andere Methode besteht darin, eine

Konfigurationsdatei zu erstellen, die die Klassendatei mit ihrem Speicherort verknüpft, zum Beispiel:

Der Code lautet wie folgt:

// configuration.php 
array_of_associations = array( 
  &#39;MainSuperClass&#39; = &#39;C:/Main/Super/Class.php&#39;, 
  &#39;MainPoorClass&#39; = &#39;C:/blablabla/gy.php&#39; 
);
Der Code der aufgerufenen Datei


lautet wie folgt:

<?php 
  require &#39;autoload_generated.php&#39;;
  function autoload($className) { 
    global $autoload_list; 
    require_once $autoload_list[$className]; 
  }
  $x = new A(); 
?>
Wenn es zu viele Dateien gibt, wird es natürlich eine sein Es ist mühsam zu pflegen, aber anders als im Klassennamen. Welche fest codierte Position ist besser?

Natürlich möchten wir diese Liste nicht manuell pflegen, daher können wir die automatische Generierung dieser Datei verwenden, um dies zu erreichen dies. Die entsprechende Datei kann phpxmljson usw. sein. Der Autor des Originalartikels hat ein solches Tool implementiert. Wenn Sie darüber nachdenken, ist die Implementierung nicht schwierig. Der Autor des Originalartikels hat sogar ein kleines Autoload-Framework entwickelt, das es wert ist, gelernt zu werden.

Das obige ist der detaillierte Inhalt vonZusammenfassung der Anwendungsbeispiele für das automatische Laden von PHP-Autoload. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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