quinta-feira, 15 de fevereiro de 2007

Métodos? Variáveis?

Olá a todos. Este post traz algo legal: métodos chamados através de variáveis.

Métodos? Variáveis? Isso!

Primeiro vamos ver um método simples:

<?
function quadrado($numero) {
return $numero * $numero;
}
?>

Certo. método que retorna o quadrado do número informado.

Agora vamos chamar este método:

<?
$quadrado = quadrado(4);
// $quadrado será 16
?>


Assim é o padrão. vamos agora ver como chamamos este método através de variável.

O PHP permite a execução de uma variável como método desde que o conteúdo da variável corresponda a um método definido e ele tenha os parâmetros corretamente.

<?
$metodo = "quadrado";

$quadrado = $metodo(4);
// $quadrado será 16 do mesmo jeito
?>


Viu? Legal, né xD

Tá legal Felipe... mais uma coisa que só você vê utilidade... -_-

Hehe dessa vez vou mostrar uma utilidade:

Vocês já precisaram implementar uma rotina que chame um método dentro de um loop (passagem por registros de um record set por exemplo) e poder usar de forma genérica para que dê para usar a mesma rotina em situações diferentes? Então... Esta é a solução.

Hmmmmmmmm..... Tá..... ...... ...... Não entendi.

Ok, Ok. Exemplo:

Eu tenho um método que faz uma consulta no banco de dados e retorna resultados em um array multidimensional (para minha aplicação não ficar acoplada ao banco de dados). Se a consulta retornar resultados demais o buffer não agüenta e o script é abortado.

Então eu criei um método que executa o comando SQL, faz um loop no resultado e a cada passagem chama o método que foi definido no parâmetro e passa para este método o registro corrente para o método fazer o que deve fazer com o registro.

Com isso podemos definir métodos diferentes e executar ações diferentes para a mesma consulta. E sem precisar repetir os loops.

Hmmmmmmmm..........Tá quase.....

Ok, Ok.


Implementação do método chave (este fica na biblioteca principal):

<?
function executarMetodoDuranteSelecao($sql, $metodo) {
$resultado = mssql_query($sql);
while($registro = mssql_fetch_array($resultado)) {
$metodo($registro);
}
}
?>


Agora um método para uma consula específica (este fica no objeto de negócio):

<?
function consultarLivros($metodo) {
$sql = "select id, nome from livros";
executarMetodoDuranteSelecao($sql, $metodo)
}
?>


Finalmente a implementação no seu script:

<?

function mostrarLivro($registro) {
echo "<p><div>$registro[id]</div>";
echo "<div>$registro[descricao]</div></p>":
}


$instanciaObjNegocio->consultarLivros("mostrarLivro");
?>


Legal. Quando executar o método consultarLivros este vai enviar o comando SQL para o método da biblioteca executarMetodoDuranteSelecao que vai executar o comando SQL, fazer o loop e a cada passagem do loop executaro método definido na variável $metodo, que vai, a cada registro, mostrar duas div contendo os campos id e descricao.

Este assunto não é muito simples. Espero que eu tenha colocado de forma que todos possam entender. A seção de comentários é aberta para qualquer dúvida ou sugestão (nada de reclamações, por favor xD).

Abraços a todos.

Nenhum comentário:

Postar um comentário