Olá, hoje vou mostrar a função __autoload que auxiliam muito na hora de programar PHP em POO(Programação Orientada a Objetos).
Primeiro é o Auto Load pra uma class:
function __autoload($class)
{
//Acoes...
}
É sempre bom lembrar que o nome da função DEVE ser __autoload, se não, lógicamente, não funciona!
Isto faz com que toda vez que você chamar uma Classe, antes de tentar instância-la ele execute as ações dentro da função, por exemplo:
function __autoload($class)
{
echo "A classe <b>{$class}</b> foi instânciada...";
}
Aqui um exemplo de chamada de classe, também falando o que vai ser enviado no parâmetro $class em cada caso:
$mysql = Connection::getInstance();//Neste caso o parametro $class se tornará a string "Connection"
//Ou
$xml = new MountXml;//Neste caso o parametro se tornará a string "MountXml"
//Ou
$player = new Player($id);//Neste caso o parametro se tornará a string "Player"
Bom aqui vai um exemplo dinâmico de uso:
Arquivo functions.php:
<?
function __autoload($class)
{
require_once("classes/".strtolower($class).".php");
}
?>
Arquivo index.php:
<?
include("functions.php");
$mysql = MysqlManager::getInstance();
?>
O exemplo acima, faria com que, antes que o sistema instânciasse a classe, ele daria um "include" no arquivo classes/mysqlmanager.php assim você não precisaria dar include sempre, atôamente em suas páginas.
Eu considero bem util, porque ai o sistema não perderia tempo lendo arquivo s em include que poderiam até não serem usados naquela hora.
Aqui um exemplo de chamada de classe, também falando o que vai ser enviado no parâmetro $class em cada caso:
$mysql = Connection::getInstance();//Neste caso o parametro $class se tornará a string "Connection"
//Ou
$xml = new MountXml;//Neste caso o parametro se tornará a string "MountXml"
//Ou
$player = new Player($id);//Neste caso o parametro se tornará a string "Player"
Você também pode fazer aquelas paradinhas chiques de erros xD:
Arquivo functions.php:
<?
function __autoload($class)
{
$arq = "classes/".strtolower($class).".php";
if(file_exists($arq))
{
require_once("classes/".strtolower($class).".php");
}
else
{
echo "Houve um erro no script, a class <b>{$class}</b> não foi encontrada";
die();
}
}
?>
Arquivo index.php:
<?
include("functions.php");
$mysql = MysqlManager::getInstance();//Suponhamos que essa class exista,
// então o script seguiria corretamente
$lol = new LOLMuthaFucka($lol);//Aqui provavelmente então daria um erro que resultaria no seguinte:
//Houve um erro no script, a class LOLMuthaFucka não foi encontrada
?>
Duvidas? Mal explicado? Quer saber mais?
Comenta!
Até mais...