Forum und email

Classes e Objetos

Introdução

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).

Dependências

Nenhuma biblioteca externa é necessária para compilar esta extensão.

Instalação

Não há nenhuma instalação necessária para utilizar estas funções, elas fazem parte do núcleo do PHP.

Configurações em execução

Esta extensão não define nenhum parâmetro de configuração no php.ini.

Tipos Resource

Esta extensão não possui nenhum tipo resource.

Constantes pré-definidas

Esta extensão não possui nenhuma constante.

Exemplos

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.

Example#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->Vegetaltrue"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.

Example#2 test_script.php

<pre>
<?php

include "classes.inc";

// Funções utilitárias

function print_vars($obj)
{
    foreach (
get_object_vars($obj) as $prop => $val) {
        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

Índice