Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der Nutzung von PHP Autoload

Zusammenfassung der Nutzung von PHP Autoload

怪我咯
怪我咯Original
2017-07-06 10:47:091277Durchsuche

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 zwischen der Klassendatei und ihrem Speicherort zu erstellen, 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; 
);
Aufruf Der Code der 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 zu viele Dateien vorhanden sind, ist die Wartung natürlich mühsam, aber Es unterscheidet sich von der festen Codierung des Speicherorts im Klassennamen. Welches ist besser?

Natürlich möchten wir diese Liste nicht manuell verwalten, daher können wir dies durch die automatische Generierung dieser Datei 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 Nutzung 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