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).
No se necesitan bibliotecas externas
para construir esta extensión
No se necesita ninguna instalación
para usar estas funciones, son parte del núcleo de
PHP.
Esta extensión no tiene directivas de
configuración en php.ini.
Esta extensión no tiene
ningún tipo de recurso definido.
Esta extensión no tiene ninguna
constante definida.
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.
Ejemplo 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.
Ejemplo 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: