Frage

ich nicht wirklich die Dokumentation für spl_autoload bekommen

bool spl_autoload_register  ([ callback $autoload_function  ] )

aus meinem Verständnis, wird es versuchen registriert laufen Funktionen, wenn PHP in einer Klasse kommt schon nicht geladen. so beispielsweise

public function autoload() {
    require ('nonLoadedClass.php');
}
spl_autoload_register(autoload);
$x = new nonLoadedClass();

bewirkt, dass die laufen benötigen? so kann ich auch viele Funktionen automatisch geladen registrieren?

public function autoloadXXX() {...}
public function autoloadYYY() {...}
public function autoloadZZZ() {...}
spl_autoload_register('autoloadXXX');
spl_autoload_register('autoloadYYY');
spl_autoload_register('autoloadZZZ');

im Fall der Lehre,

require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));

ist ein Array übergeben, so dass ich es versucht erraten wird die Autoload Funktion innerhalb der Lehre Klasse laufen (was erforderlich war)?

War es hilfreich?

Lösung

spl_autoloader_register Register eine Callback-Funktion / Methode, die aufgerufen wird, wenn der Code versucht, eine nicht bekannte Klasse zu verwenden.

Rückruf Funktion kann auf verschiedene Arten beschrieben werden:

  • eine einfache Funktion Name: 'my_function'
  • eine statische Methode einer Klasse: array('MyClass', 'myMethod')
  • ein Verfahren zur Herstellung einer Instanz einer Klasse: array($myObject, 'myMethod')

Im Falle der Lehre, so scheint es, die zweite Lösung zu sein. Wenn eine Klasse, dass PHP nicht weiß, verwendet wird, wird der Autoloader Doctrine::autoload nennen, es den Klassennamen als Parameter übergeben


  

, so kann ich registrieren auch viele Autoload   Funktionen?

Ja, können Sie, mit spl_autoload_register :

  

Wenn es muß mehr automatisch geladen sein   Funktionen, spl_autoload_register()   ermöglicht dies. es effektiv   erzeugt eine Warteschlange von Funktionen automatisch geladen,   und verläuft durch jede von ihnen in der   bestellen sie definiert sind.

Aber wir definieren nicht allgemein eine automatische Laden Funktion / Methode für jede Klasse, die wir haben; das ziemlich ineffizient wäre, nehme ich an.

Stattdessen verwenden wir die Klasse-Namen, die von der Selbstladefunktion empfangen wird, zu entscheiden, welche Datei aufgenommen werden sollte.

Zum Beispiel kann eine automatische Laden Funktion könnte wie folgt aussehen:

function my_autoloader($className)
{
    require LIBRARY_PATH . '/' . $className . '.php';
}

Der Trick ist, dass wenn Sie Ihre Dateien nach den Klassen benannt sind sie enthalten, ist es sofort viel einfacher; -)

Aus diesem Grunde oft Klassen genannt werden mit der PEAR-Konvention: My_Class_Name Karten in die Datei My/Class/Name.php

Andere Tipps

Ihre gesamte Aussage ist richtig.

spl_autoload_register können Sie mehrere Funktionen automatisch geladen registrieren. Im Fall, dass Sie versuchen, ein Objekt einer Klasse zu erstellen oder zu verwenden, die nicht in die PHP-Umgebung geladen ist, wird PHP alle für diese Klasse sucht, um Ihre Autoload-Funktionen ausgeführt werden.

Die Lehre Beispiel geben Sie verwendet eine sogenannte Rückruf ein Verfahren innerhalb eines registrieren Klasse. Ein Rückruf ist einfach ein Array der Klassennamen enthält (für statische Methoden) oder eine Instanz dieser Klasse (für nicht-statische Methoden) und der Methodenname.

Was sagen ist richtig. Es heißt, wenn eine unbekannte Klasse instanziiert wird. Sie erhalten dann die Möglichkeit, include / erfordern die notwendige Datei.

Wenn die Funktion besteht in einer Klasse, müssen Sie in einem Array übergeben. In diesem Fall ist es eine statische Funktion, weil sie in der Lehre Klasse übergeben statt einer Instanz der Lehre Klasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top