Funciones de Clases/Objetos

XII. 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.

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:

[...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable

Tabla de contenidos
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 --  Devuelve TRUE si el objeto es de esta clase o tiene esta clase como uno de sus padres
is_subclass_of --  Devuelve TRUE 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