Domanda

io non realmente ottenere la documentazione per spl_autoload

bool spl_autoload_register  ([ callback $autoload_function  ] )

dalla mia comprensione, cercherà di eseguire le funzioni registrate quando php si imbatte in una classe non caricata già. così ad esempio,

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

causerà la richiedono per funzionare? così posso anche registrare molte funzioni autoload?

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

nel caso della dottrina,

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

una matrice viene passata, quindi credo che cercherà di eseguire la funzione caricamento automatico all'interno della classe Dottrina (che è stato necessario)?

È stato utile?

Soluzione

spl_autoloader_register registra una funzione di richiamata / metodo, che verrà chiamato quando il codice sta cercando di utilizzare una classe non-conosciuto.

callback funzione può essere descritta in diversi modi:

  • un semplice nome di funzione: 'my_function'
  • un metodo statico di una classe: array('MyClass', 'myMethod')
  • un metodo di un'istanza di una classe: array($myObject, 'myMethod')

Nel caso della dottrina, sembra essere la seconda soluzione:. Se si utilizza una classe che PHP non conosce, il caricatore automatico chiamerà Doctrine::autoload, passando il nome della classe come parametro

  

così posso anche registrare molti autoload   funzioni?

Sì, è possibile, con spl_autoload_register :

  

Se ci deve essere autoload multipla   funzioni, spl_autoload_register()   consente per questo. E 'efficace   crea una coda di funzioni caricamento automatico,   e attraversa ciascuno di essi nel   nell'ordine in cui sono definiti.

Ma in genere non ci definiamo una funzione caricamento automatico / metodo per ogni classe che abbiamo; che sarebbe del tutto inefficiente, suppongo.

Invece, usiamo il nome della classe, che viene ricevuto dalla funzione di caricamento automatico, per decidere quali file deve essere incluso.

Per esempio, una funzione di caricamento automatico potrebbe essere simile a questo:

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

Il trucco è che se i file sono chiamati dopo le classi che contengono, diventa immediatamente molto più facile; -)

Questo è il motivo per cui le classi sono spesso nominati utilizzando la convenzione PEAR: mappe My_Class_Name al file My/Class/Name.php

Altri suggerimenti

Il vostro intero affermazione è corretta.

spl_autoload_register permette di registrare più funzioni autoload. Nel caso in cui si tenta di creare o utilizzare un oggetto di una classe che non è stato caricato in ambiente PHP, PHP eseguirà tutte le funzioni autoload alla ricerca di quella classe.

L'esempio Dottrina si dà sta usando quello che viene chiamato un callback per registrare un metodo all'interno di una classe. Una callback è semplicemente una matrice contenente il nome della classe (per metodi statici) oppure un'istanza di tale classe (per i metodi non statici), e il nome del metodo.

Che dire è corretta. Si chiama quando una classe sconosciuta viene creata un'istanza. Si raggiunge quindi la possibilità di includere / richiedere il file necessario.

Quando la funzione risiede in una classe, devi passare in un array. In questo caso è una funzione statica perché passano nella classe Doctrine al posto di un'istanza della classe dottrina.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top