Question

je ne vraiment obtenir la documentation pour spl_autoload

bool spl_autoload_register  ([ callback $autoload_function  ] )

de ma compréhension, il essaiera d'exécuter les fonctions enregistrées en php est dans une classe non chargée déjà. donc par exemple,

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

provoquera l'obliger à courir? donc je peux aussi enregistrer de nombreuses fonctions de chargement automatique?

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

dans le cas de la doctrine,

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

un tableau est, donc je suppose qu'il va essayer de lancer la fonction de chargement automatique dans la classe Doctrine (ce qui était nécessaire)?

Était-ce utile?

La solution

spl_autoloader_register enregistre une fonction de rappel / procédé, qui sera appelé lorsque votre code tente d'utiliser une classe non connue.

rappel fonction peut être décrite de plusieurs façons:

  • simple nom de la fonction: 'my_function'
  • une méthode statique d'une classe: array('MyClass', 'myMethod')
  • une méthode d'une instance d'une classe: array($myObject, 'myMethod')

Dans le cas de la doctrine, il semble être la deuxième solution. Si une classe PHP qui ne sait pas est utilisé, le chargeur automatique appellera Doctrine::autoload, faisant passer le nom de classe comme paramètre

  

donc je peux aussi vous inscrire beaucoup autoload   fonctions?

Oui, vous pouvez, avec spl_autoload_register :

  

S'il doit y avoir plusieurs autoload   fonctions, spl_autoload_register()   permet. efficacement   crée une file d'attente des fonctions de chargement automatique,   et passe à travers chacun d'eux dans la   ordre dans lequel ils sont définis.

Mais nous ne définissons généralement pas une fonction d'auto-chargement / méthode pour chaque classe, nous avons; ce serait tout à fait inefficace, je suppose.

Au lieu de cela, nous utilisons le nom de classe, qui est reçu par la fonction de chargement automatique, de décider quel fichier doit être inclus.

Par exemple, une fonction de chargement automatique pourrait ressembler à ceci:

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

L'astuce est que si vos fichiers sont nommés après les classes qu'ils contiennent, il devient beaucoup plus facile immediat; -)

C'est pourquoi les classes sont souvent nommées en utilisant la convention PEAR: cartes My_Class_Name au fichier My/Class/Name.php

Autres conseils

Votre déclaration entière est correcte.

spl_autoload_register vous permet d'enregistrer plusieurs fonctions de chargement automatique. Dans le cas où vous essayez de créer ou d'utiliser un objet d'une classe qui n'a pas été chargé dans l'environnement PHP, PHP exécuter toutes les fonctions de votre recherche autoload pour cette classe.

L'exemple que vous donnez Doctrine utilise ce qu'on appelle un rappel pour enregistrer une méthode à l'intérieur d'un classe. Un rappel est tout simplement un tableau contenant le nom de classe (pour les méthodes statiques) ou une instance de cette classe (par des méthodes non-statique), et le nom de la méthode.

Qu'est-ce que dire est correct. Il est appelé quand une classe inconnue est instancié. Vous obtenez alors la chance d'include / require le fichier nécessaire.

Lorsque la fonction réside dans une classe, vous devez passer dans un tableau. Dans ce cas, il est une fonction statique, car ils passent dans la classe Doctrine au lieu d'une instance de la classe Doctrine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top