Estas funções te permitem obter informações sobre classes
e instâncias de objetos. Você pode obter o nome da classe
ao qual um objeto pertence, bem como suas propriedades e
métodos. Usando estas funções, você pode descobrir não apenas
a classe de um objeto, mas também seu parentesco
(no caso, que classe este objeto de classe se estende).
Nenhuma biblioteca externa é necessária para compilar esta extensão.
Não há nenhuma instalação necessária para utilizar estas
funções, elas fazem parte do núcleo do PHP.
Esta extensão não define nenhum parâmetro de configuração no php.ini.
Esta extensão não possui nenhum tipo resource.
Esta extensão não possui nenhuma constante.
Neste exemplo, nós primeiramente definiremos uma classe base e uma
extensão da classe. A classe base descreve um vegetal comum,
que é comestível ou não e que tem sua cor. A sub-classe
Espinafre adiciona um método para cozinhá-lo e outro
para descobrir se ele está cozido.
Exemplo 1. classes.inc
<?php
// Classe base com propriedades e métodos de membros class Vegetal {
var $comestivel; var $cor;
function Vegetal( $comestivel, $cor="verde" ) { $this->comestivel = $comestivel; $this->cor = $cor; }
function is_comestivel() { return $this->comestivel; }
function qual_cor() { return $this->cor; }
} // Fim da classe Vegetal
// estender a classe base class Espinafre estende Vegetal {
var $cozido = false;
function Espinafre() { $this->Vegetal( true, "verde" ); }
function cozinhe() { $this->cozido = true; }
function esta_cozido() { return $this->cozido; }
} // Fim da classe Espinafre
?>
|
|
Nós instânciamos 2 objetos destas classes e exibimos informações
sobre elas, incluindo o parentesco de suas classes.
Nós também definimos algumas funções úteis, principalmente para ter
uma boa saída de variáveis.
Exemplo 2. test_script.php
<pre> <?php
include "classes.inc";
// Funções utilitárias
function print_vars($obj) { $arr = get_object_vars($obj); while (list($prop, $val) = each($arr)) echo "\t$prop = $val\n"; }
function print_methods($obj) { $arr = get_class_methods(get_class($obj)); foreach ($arr as $method) echo "\tfunction $method()\n"; }
function class_parentesco($obj, $class) { if (is_subclass_of($$obj, $class)) { echo "Objeto $obj pertence à classe ".get_class($$obj); echo " uma subclasse de $class\n"; } else { echo "Objeto $obj não pertence a uma subclasse de $class\n"; } }
// instanciar 2 objetos
$vegetariano = new Vegetal(true, "azul"); $folheado = new Espinafre();
// Exibe informação sobre os objetos echo "vegetariano: CLASS " . get_class($vegetariano) . "\n"; echo "folheado: CLASS " . get_class($folheado); echo ", PARENTE " . get_parent_class($folheado) . "\n";
// Mostra as propriedades de vegetariano echo "\nvegetariano: Propriedades\n"; print_vars($vegetariano);
// e os métodos de folheado echo "\nfolheado: Métodos\n"; print_methods($folheado);
echo "\nParentesco:\n"; class_parentesco("folheado", "Espinafre"); class_parentesco("folheado", "Vegetal"); ?> </pre>
|
Uma coisa importante para se notar no exemplo acima é que
o objeto $folheado é uma instância da classe
Espinafre que é uma subclasse de
Vegetal,
então a última parte do script acima exibirá:
[...]
Parentesco:
Objeto folheado não pertence a uma subclasse de Espinafre
Object folheado pertence à classe Espinafre uma subclasse de Vegetal |
|