Manual do PHP
Anterior |  | Próxima

# XI. 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
classkit_method_rename | Acima | call_user_method_array