Carregamento Automático de Classes em POO em PHP
Você já sabe que para usar
qualquer classe, devemos incluí-la
via require. Quando em um projeto
existem muitas classes, acabamos com muitas
inclusões, que são muito inconvenientes de escrever
e difíceis de controlar.
Para resolver esse problema, foi adicionado ao PHP o carregamento automático de classes. O carregamento automático permite que o PHP carregue automaticamente o arquivo com a classe ao tentar acessar essa classe no código. No entanto, as classes não serão carregadas simplesmente assim - elas precisam ser posicionadas nas pastas do site de uma maneira especial, seguindo alguma convenção sobre os nomes de arquivos e pastas das classes. Pode-se usar a convenção integrada no PHP, ou inventar a sua própria e usá-la.
Vamos começar analisando a convenção padrão do PHP. Essa convenção consiste no fato de que se temos um determinado arquivo com uma classe, então o caminho pelas pastas do site até esse arquivo deve coincidir com o namespace do arquivo, e o nome do arquivo deve coincidir com o nome da classe armazenada nele. Ao mesmo tempo, os nomes das pastas e do arquivo devem estar em letras minúsculas.
Vamos ver um exemplo. Suponha que temos a seguinte classe:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Por convenção, esta classe deve estar localizada
na pasta /core/admin/ no arquivo
pagecontroller.php.
Vamos agora no arquivo index.php usar
nossa classe, sem incluí-la via require,
mas usando o carregamento automático. Para isso, no início
do arquivo onde as classes são chamadas, deve-se
chamar a função spl_autoload_register.
Vamos fazer isso:
<?php
spl_autoload_register(); // ativamos o carregamento automático
$obj = new Core\Admin\PageController; // criamos o objeto tranquilamente
?>
No arquivo index.php, ative o carregamento
automático de classes. Seguindo a convenção de nomes
de pastas e arquivos, crie a classe Core\User,
a classe Core\Admin\Controller e a classe
Project\User\Data. No arquivo index.php,
crie objetos dessas classes.