Forum und email

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->Vegetabletrue"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