aprender PHP logo

Em nossa primeira aula sobre OOP em PHP, você aprendeu que devemos criar classes em arquivos separados, onde o arquivo que mantém a classe, deve ter o nome class-nomedaclasse.php. Com isso, podemos utilizar uma função especial do PHP chamada {php}__autoload{/php} para carregar nossos arquivos de classes automaticamente.

Ao invés de utilizar as funções include, include_once, require ou require_once para incluir os arquivos de classe todas as vezes que precisarmos de um novo objeto da mesma, você pode fazer o seguinte.

Suponhamos que eu tenha uma classe simples:

<?php
class Pessoa
{
	// Propriedades da classe
	public $nome;
	public $sobrenome;
	public $idade;
	
	// Construtor - Define os valores das proprieades
	public function __construct ( $nome = null, $sobrenome = null, $idade = 0 ) {
		$this->nome      = $nome;
		$this->sobrenome = $sobrenome;
		$this->idade     = (int) $idade;
	}
	
	// Método para exibir
	public function exibir () {
		echo 'Nome: ';
		echo $this->nome . '<br>';
		echo 'Sobrenome: ';
		echo $this->sobrenome . '<br>';
		echo 'Idade: ';
		echo $this->idade . '<br><br>';
	}
}

Se eu quiser utilizá-la, devo fazer o seguinte:

<?php 
include('classes/class-pessoa.php');

// Instância da classe Pessoa
$pessoa = new Pessoa('Luiz', 'Miranda Figueiredo', 27);
$pessoa->exibir();
?>

Perceba que a função {php}include{/php} está incluindo o arquivo da classe que pretendo utilizar em meu código.

Porém, suponhamos que eu tenha milhares de classes separadas em arquivos distintos (que é o recomendado). Todas as vezes que eu precisasse de determinada classe, teria que incluir o arquivo da mesma para poder utilizá-la.

A função {php}__autoload{/php} faz isso automaticamente por mim. Ela detecta o nome da classe que estou tentando criar, e tenta incluir tal classe em meu código. Veja:

<?php 
// função para carregar classes automaticamente
function __autoload( $class ){
	// Garante apenas letras minúsculas no nome do arquivo de classe
	$class = strtolower( $class );
	
	// Inclui a classe que precisamos
	include_once("classes/class-{$class}.php");
}

// Instância da classe Pessoa
$pessoa = new Pessoa('Luiz', 'Miranda Figueiredo', 27);
$pessoa->exibir();
?>

Agora, independente da classe que eu tentar utilizar, o PHP vai saber que pretendo que ele inclua o arquivo da mesma em meu código. Porém, é necessário que você siga as instruções que descrevi anteriormente, ou seja, o nome do arquivo da classe deve ser "class-nomedaclasse.php", com letras minúsculas.

Isso vai facilitar a sua vida!