Funciones de Clases/Objetos
Introducción
Estas funciones permiten obtener información sobre clases y objetos. Se puede obtener el nombre de la clase a la que pertenece un objeto, asi como las propiedades de sus miembros y métodos. Usando estas funciones se puede obtener no solo lo comentado en la frase anterior, también se puede obtener la familia del objeto (p.ej. qué clase está extendiendo la clase a la que pertenece el objeto).
Requisitos
No se necesitan bibliotecas externas para construir esta extensión
Instalación
No se necesita ninguna instalación para usar estas funciones, son parte del núcleo de PHP.
Configuración en tiempo de ejecución
Esta extensión no tiene directivas de configuración en php.ini.
Tipos de recursos
Esta extensión no tiene ningún tipo de recurso definido.
Constantes predefinidas
Esta extensión no tiene ninguna constante definida.
Ejemplos
En este ejemplo, definimos primero una clase base y una extensión de esta clase. La clase base define un vegetal genérico, si es comestible y su color. La subclase Spinach añade un metodo para cocinarlo y otro para saber si esta cocinado.
Example#1 classes.inc
<?php
// base class with member properties and methods
class Vegetable {
var $edible;
var $color;
function Vegetable( $edible, $color="green" ) {
$this->edible = $edible;
$this->color = $color;
}
function is_edible() {
return $this->edible;
}
function what_color() {
return $this->color;
}
} // end of class Vegetable
// extends the base class
class Spinach extends Vegetable {
var $cooked = false;
function Spinach() {
$this->Vegetable( true, "green" );
}
function cook_it() {
$this->cooked = true;
}
function is_cooked() {
return $this->cooked;
}
} // end of class Spinach
?>
Creamos 2 objetos de estas clases e imprimimos información sobre ellos, incluyendo la jerarquia de clases a la que pertenecen. También definimos algunas funciones, especialmente para imprimir las variables de una manera ordenada.
Example#2 test_script.php
<pre>
<?php
include "classes.inc";
// utility functions
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_parentage($obj, $class) {
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo "Object $obj belongs to class ".get_class($$obj);
echo " a subclass of $class\n";
} else {
echo "Object $obj does not belong to a subclass of $class\n";
}
}
// instantiate 2 objects
$veggie = new Vegetable(true,"blue");
$leafy = new Spinach();
// print out information about objects
echo "veggie: CLASS ".get_class($veggie)."\n";
echo "leafy: CLASS ".get_class($leafy);
echo ", PARENT ".get_parent_class($leafy)."\n";
// show veggie properties
echo "\nveggie: Properties\n";
print_vars($veggie);
// and leafy methods
echo "\nleafy: Methods\n";
print_methods($leafy);
echo "\nParentage:\n";
class_parentage("leafy", "Spinach");
class_parentage("leafy", "Vegetable");
?>
</pre>
One important thing to note in the example above is that the object $leafy is an instance of the class Spinach which is a subclass of Vegetable, therefore the last part of the script above will output:
[...] Parentage: Object leafy does not belong to a subclass of Spinach Object leafy belongs to class spinach a subclass of Vegetable
Table of Contents
- call_user_method_array — Llamar un método de usuario dado con una matriz de parámetros [obsoleta]
- call_user_method — Llamar un método de usuario en un objeto especÃfico [obsoleta]
- class_exists — Verifica si la clase ha sido definida
- get_class_methods — Devuelve un vector (matriz unidimensional) con los nombres de los métodos de la clase en question.
- get_class_vars — Devuelve una matriz con las propiedades (inicializadas por defecto) de la clase
- get_class — Devuelve el nombre de la clase de un objeto
- get_declared_classes — Devuelve una matriz con el nombre de las clases definidas
- get_declared_interfaces — Devuelve una matriz de todas las interfaces declaradas
- get_object_vars — Devuelve un vector de propiedades del objecto
- get_parent_class — Recupera el nombre de la clase padre para un objeto o clase
- interface_exists — Verifica si la interfaz ha sido definida
- is_a — Verifica si el objeto es de esta clase o tiene esta clase como uno de sus padres
- is_subclass_of — Verifica si el objeto tiene esta clase como uno de sus padres
- method_exists — Comprueba que el metódo de clase existe
- property_exists — Verifica si el objeto o clase tiene una propiedad