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->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.
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
- call_user_method_array — Chama métodos de usuário dado uma matriz de parâmetros [obsoleto]
- call_user_method — Chama um método do usuário de um específico objeto [obsoleto]
- class_exists — Checa se uma classe foi definida
- get_class_methods — Retorna uma matriz associativa com nomes de métodos da classe
- get_class_vars — Retorna uma matriz das propriedades padrão da classe
- get_class — Retorna o nome da classe de um objeto
- get_declared_classes — Retorna uma matriz com os nomes das classes definidas
- get_declared_interfaces — Retorna um array com todas as interfaces declaradas
- get_object_vars — Retorna uma matriz associativa com as propriedades do objeto
- get_parent_class — Devolve o nome da classe pai para o objeto ou classe
- interface_exists — Checa se a interface foi definida
- is_a — Verifica se o objeto é de uma classe ou de sua classe pai
- is_subclass_of — Retorna TRUE se o objeto tem esta classe como uma de suas classes pai
- method_exists — Checa se o método da classe existe
- property_exists — Checa se o objeto ou a classe tem uma propriedade