Saltar a contenido

Trabajando con objetos

Al trabajar con clases y objetos, existe un conjunto de funciones ya definidas por el lenguaje que permiten obtener información sobre los objetos:

  • instanceof: permite comprobar si un objeto es de una determinada clase.
  • get_class: devuelve el nombre de la clase.
  • get_declared_class: devuelve un array con los nombres de las clases definidas.
  • class_alias: crea un alias.
  • class_exists / method_exists / property_exists: true si la clase / método / propiedad está definida.
  • get_class_methods / get_class_vars / get_object_vars: devuelve un array con los nombres de los métodos / propiedades de una clase / propiedades de un objeto que son accesibles desde donde se hace la llamada.

Un ejemplo de estas funciones puede ser el siguiente:

ejemploobjeto.php
<?php
$p = new Producto("PS5");
if ($p instanceof Producto) {
    echo "Es un producto";
    echo "La clase es " . get_class($p);

    class_alias("Producto", "Articulo");
    $c = new Articulo("Nintendo Switch");
    echo "Un artículo es un " . get_class($c);

    print_r(get_class_methods("Producto"));
    print_r(get_class_vars("Producto"));
    print_r(get_object_vars($p));

    if (method_exists($p, "mostrarResumen")) {
        $p->mostrarResumen();
    }
}
Es un producto
La clase es Producto
Un artículo es un Producto
Array ( [0] => __construct [1] => mostrarResumen )
Array ( )
Array ( )

Clonado

Al asignar dos objetos, no se copian; se crea una nueva referencia. Si se necesita una copia, hay que clonarlo mediante el método clone(object) : object

// Creamos el objeto original
$original = new Producto("PS5", 499.99);

// Clonamos el objeto
$copia = clone $original;

Si queremos modificar el clonado por defecto, hay que definir el método mágico __clone(), que se ejecutará después de copiar todas las propiedades.

Más información en la documentación oficial