XI. 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).

Requirimientos

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

Hosting by: hurra.com
Generated: 2007-01-26 18:01:09