Objota O mundo orientado a objetos

Utilizando Config para carregar suas classes

Posted on agosto 28, 2010

Muito foi visto e comentado até agora a respeito de php e orientação a objetos, suas classes e recursos. Vamos então agora falar de um recurso muito importante do php na hora de utilizar suas classes.

Junto com este conceito, se você ainda não conhece, iremos falar de um arquivo chamado config. Que nada mais é do que um arquivo de configuração, onde se declara constantes do sistema (site), e onde geralmente se declara a função __autoload() do php.

Para este artigo vamos criar quatro arquivos:

index.php
config.php
Automovel.class.php
Carro.class.php

Config será nosso arquivo de configuração, index.php será o arquivo que será requisitado, e nossas classes serão carregadas pela função __autoload().

Como funciona o autoload?

Toda vez que você instancia um objeto esta função recebe por parâmetro o nome do objeto que você está instanciando. Sendo assim com o nome do objeto e uma pequena concatenação de string é possível incluir o arquivo da classe quando necessário.

Porém só é possível implementar isso uma vez, geralmente no config. Então fica bem mais fácil, pois você só precisa saber que pra carregar as classes é só dar um include no config.

Tendo isso em mente só é preciso estar atento a uma coisa. Mantenha um padrão de nomenclatura para suas classes, geralmente se faz assim:

NomeDaClasse.class.php -

O "NomeDaClass", em verde, é o mesmo nome declarado para a classe dentro do arquivo php. O final em vermelhor "class.php" é o sufixo adotado para a nomenclatura.

Vejamos abaixo um exemplo prático. Coloque as classes em um diretorio chamado classes e o restante dos arquivos no diretório raiz:

>classes>Automovel.class.php
>classes>Carro.class.php
>config.php
>index.php

Automovel.class.php


<?php
class Automovel{
	public function Automovel(){
		echo "Placa = BAE-5533<br/>";
	}
}
?>

Carro.class.php


<?php
class Carro extends Automovel{

	public function Carro(){
		parent::Automovel();
		echo "Numero de Rodas = 4";
	}
}
?>

config.php


<?php
function __autoload($nomeClasse){
	//Verifica se existe a classe no diretório classes
	if(file_exists("classes/".$nomeClasse.".class.php")){
		//Se existe carrega
		include_once("classes/".$nomeClasse.".class.php");
	}
}
?>

index.php


<?php
include_once("config.php");

//Instancio o objeto Automóvel
echo "<b>Instancio o objeto Automóvel</b><br/>";
$Automovel = new Automovel();

echo "<br/>";

//Instancio o objeto Carro
echo "<b>Instancio o objeto Carro</b><br/>";
$Carro = new Carro();
?>

Neste exemplo utilizamos um conceito já conhecido de um outro artigo, a herança de classes. Como deve ter visto na implementação, basta indicar o diretório das classes e a função autoload irá se encarregar de carregar as classes quando necessário. Veja que é você que tem que implementar esta função, por isso é muito importante verificar a existência do arquivo para depois incluí-lo, e use include_once ou include, pois caso ocorra algum erro no carregamento ele irá apresentar o erro, porém a aplicação seguirá em frente executando o resto do script.

Tudo certinho, agora acesse a página index.php e veja o resultado!

Bem mais fácil lembrar somente do endereço do config,  não !?

Esperimente criar mais classes no diretório classes. Até a próxima! 🙂

Posted by Rodrigo Ireno

Comentários (7) Trackbacks (2)
  1. Rodrigo, como ficaria a função __autoload para chamar diversas classes no mesmo config.php? Lembrando que nele também ficarão as informações de conexão e sistema. Obrigado.

    • Então bruno, este exemplo acima carrega qualquer classe! que esteja dentro do diretório “classes”, e que termine com “class.php”. É na verdade uma grande sacada, pois toda vez que eu instancio um objeto, esta função __autoload() recebe o nome do objeto! então é só juntar as coisas e dar include. veja — $nomeClasse.”class.php”, também poderia ser: $nomeClasse.”.php” — desde que termine com “.php”. Lembre-se que antes vem o caminho para chegar até a classe, no meu caso era somente “classes/”. Neste caso não utilizei o caminho absoluto, geralmente se utiliza a função getEnv() pra pegar este caminho.

      http://php.net/manual/en/function.getenv.php

    • E claro, siga esta estrutura.

      class Teste {
      // …
      }

      O nome do arquivo que contém a classe “Teste” tem que ter o mesmo nome. Caso contrário não dará certo! veja:
      Teste.class.php = “Teste” + “.class.php”

      se o nome do arquivo fosse:
      teste.class.php = não daria certo, pois neste caso “teste” inicia com letra minúscula.

  2. Entendi, obrigado.

  3. Legal irmao, fiz umas modificações pra facilitar o trampo. vlw

  4. Parabéns pelo artigo, bom d+++, valeu

  5. Muito bom, excelente mesmo.


Leave a comment