Manual do PHP
Anterior |  | Próxima

# IX. 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.

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

Anterior | Principal | Próxima
variant_xor | Acima | call_user_method_array