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: