Pergunta

eu realmente não obter a documentação para spl_autoload

bool spl_autoload_register  ([ callback $autoload_function  ] )

No meu entendimento, ele vai tentar executar funções registadas quando php se depara com uma classe já não estiver carregado. tão exemplo,

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

fará com que o exigem para executar? então eu também pode registrar muitas funções autoload?

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

no caso de doutrina,

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

um array é passado, então eu acho que ele vai tentar executar a função autoload dentro da classe Doctrine (que foi necessário)?

Foi útil?

Solução

spl_autoloader_register registros uma chamada de retorno função / método, que será chamado quando o código está tentando usar uma classe não-conhecido.

A callback função pode ser descrito de várias maneiras:

  • um nome de função simples: 'my_function'
  • um método estático de uma classe: array('MyClass', 'myMethod')
  • um método de uma instância de uma classe: array($myObject, 'myMethod')

No caso da Doutrina, que parece ser a segunda solução:. Se uma classe que PHP não sabe é usado, o autoloader vai chamar Doctrine::autoload, passando-o nome da classe como um parâmetro


para que eu possa também registar muitos autoload funções?

Sim, você pode, com spl_autoload_register :

Se deve haver múltiplos autoload funções, spl_autoload_register() permita. ele efetivamente cria uma fila de funções Autocarregamento e vai até cada um deles na ordem em que são definidas.

Mas nós não geralmente definem uma função autoloading / método para cada classe nós temos; que seria muito ineficiente, suponho.

Em vez disso, usamos o nome da classe, que é recebido pela função de carregamento automático, para decidir quais arquivos devem ser incluídos.

Por exemplo, uma função de autoload pode ter esta aparência:

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

O truque é que se seus arquivos são nomeados após as classes que eles contêm, ele imediatamente se torna muito mais fácil; -)

É por isso que as aulas são muitas vezes chamado usando a convenção PERA: My_Class_Name mapeia para o My/Class/Name.php arquivo

Outras dicas

Sua declaração inteira é correta.

spl_autoload_register permite registrar múltiplas funções autoload. No caso em que você tenta criar ou usar um objeto de uma classe que não tenha sido carregado no ambiente PHP, PHP será executado todas as suas funções autoload olhando para essa classe.

O exemplo a Doutrina que você dá é usar o que é chamado de um callback para registrar um dentro do método de um classe. Uma chamada de retorno é simplesmente uma matriz contendo o nome da classe (métodos para estáticas), ou um exemplo dessa classe (por métodos não-estáticas), e o nome do método.

O que dizem é correta. É chamado quando uma classe desconhecida é instanciado. Você, então, ter a chance de incluir / exigem que o arquivo necessário.

Quando reside a função em uma classe, você tem que passar em uma matriz. Neste caso, é uma função estática porque passam na classe Doctrine em vez de uma instância da classe Doutrina.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top