informaticaPC

Tutorial de PHP

Recorrer propiedades y métodos, métodos mágicos en PHP, crear un objeto dinámicamente...


Regístrate

Tus datos no serán compartidos, solo nosotros te enviaremos información y novedades

¿Qué son los métodos mágicos en PHP?

PHP 5 dispone de una serie de llamados métodos mágicos que pueden ser usados al definir Clases. Algunos de ellos son:

  • __construct(): puede ser usado como constructor de la Clase.

    Tal y como hemos visto anteriormente, podemos usar como constructor de una Clase este método o bien uno con el mismo nombre que tenga la Clase: si se pusieran ambos sólo se procesaría __construct().

  • __destruct(): define un destructor de Clase.
  • __toString(): permite definir lo que devolverá un Objeto si es tratado como una cadena de texto.
  • __clone(): usado para crear una copia de un Objeto.

Veamos a continuación un ejemplo.

Persona.php:

<?php
    class Persona
    {

        // Propiedades
        private $nombreCompleto = null;

        // Constructor:
        function __construct() {
            echo "<p>En el Constructor de la Clase [".get_class($this)."]</p>";
        }

        // El Constructor también puede hacerse así (con el mismo nombre del Clase):
        function Persona() {
            echo "<p>No entraremos aquí puesto que existe __construct()</p>";
        }

        // Destructor:
        function __destruct() {
            echo "<p>En el Destructor de la Clase [".get_class($this)."]</p>";
        }

        // Métodos:

        public function getNombreCompleto() {
            return $this->nombreCompleto;
        }

        public function setNombreCompleto( $nombreCompleto ) {
            $this->nombreCompleto = $nombreCompleto;
        }

        public function __toString() {
            return "el nombre de la persona es: [".strtolower($this->getNombreCompleto())."]";
        }

    }
?>

06_metodos_magicos.php:

<?php
    require_once("Persona.php");

    // Crear una instancia del objeto:
    $objPersona1 = new Persona();
    $objPersona1->setNombreCompleto("MARTINA M. M.");

    echo "objPersona1: ".$objPersona1."<br />";
    echo "objPersona1: ".$objPersona1->__toString()."<p />";

    echo "Creamos un objeto clonado 'objPersona2' a partir de 'objPersona1':<p/>";

    $objPersona2 = clone $objPersona1;

    echo "objPersona2: ".$objPersona2."<br />";
    echo "objPersona2: ".$objPersona2->__toString()."<p />";

    echo "Modificamos el objeto clonado 'objPersona2':<p/>";

    $objPersona2->setNombreCompleto("Pedro R. Laurel");

    echo "objPersona1: ".$objPersona2."<br />";
    echo "objPersona1: ".$objPersona2->__toString()."<p />";

    echo "Comprobamos si el objeto original 'objPersona1' ha sido modificado:<p/>";

    echo "objPersona2: ".$objPersona1."<br />";
    echo "objPersona2: ".$objPersona1->__toString()."<br />";
?>

Descargar ejemplo

métodos mágicos en PHP

Recorrer las propiedades y métodos de un Objeto

Usando la funciones de PHP get_class_vars() y get_object_vars() obtendremos un array asociativo con las propiedades accesibles del Objeto o Clase indicados respectivamente, y posteriormente con un bucle foreach() podremos averiguar el nombre y valor de cada una de ellas.

Asimismo, con get_class_methods() obtendremos los nombres de los métodos de la Clase.

También podemos función get_class(), que devuelve el nombre de la Clase de la cual un Objeto ha sido instanciado.

Persona4.php:

<?php
    class Persona4
    {
        // Propiedades
        private $nombre    = null;
        private $apellidos = null;

        public  $provincia = null;
        public  $pais	  = "ESPAÑA";
        public  $importe   = 100;

        // Constantes:
        const PERSONA_HOMBRE = "HOMBRE";
        const PERSONA_MUJER  = "MUJER";

        // Constructor vacío:
        function Persona4() {
        }

        // Métodos:

        function getNombre() {
            return $this->nombre;
        }

        function setNombre( $nombre ) {
            $this->nombre = $nombre;
        }

        private function getPais() {
            return $this->pais;
        }

        public function getPropiedades(){
            $aPropiedades1 = get_class_vars("Persona4");
            foreach( $aPropiedades1 as $nombre => $valor ){
                echo $nombre.": [".$valor."]<br/>";
            }
        }
    }
?>

07_objeto_recorrer.php:

<?php
    require_once("Persona4.php");

    $objPersona = new Persona4();

    $aPropiedades1 = get_class_vars("Persona4");
    $aPropiedades2 = get_object_vars( $objPersona );
    $aMetodos	  = get_class_methods("Persona4");

    // También es posible hacerlo pasando un Objeto como parámetro...
    // $aPropiedades1 = get_class_vars( get_class($objPersona) );
    // $aMetodos = get_class_methods( get_class($objPersona) );

    echo "<p>PROPIEDADES 1:</p>";

    foreach( $aPropiedades1 as $nombre => $valor ){
        echo $nombre.": [".$valor."]<br/>";
    }

    echo "<p>PROPIEDADES 2:</p>";

    foreach( $aPropiedades2 as $nombre => $valor ){
        echo $nombre.": [".$valor."]<br/>";
    }

    echo "<p>PROPIEDADES (obtenidas desde la clase):</p>";

    // Se devolverán TODAS las propiedades:
    $objPersona->getPropiedades();

    echo "<p>MÉTODOS:</p>";

    foreach( $aMetodos as $nombre => $valor ){
        echo $nombre.": [".$valor."]<br/>";
    }

    echo "<p>Finalizado</p>";
?>

Descargar ejemplo

Propiedades y métodos

Observa que las propiedades y métodos son accesibles dependiendo del ámbito: desde dentro de una Clase se muestran todos, mientras que desde fuera de ella serán visibles únicamente los definidos como public.

Más información

Vea también: [ get_class() ] - [ get_class_vars() ] - [ get_object_vars() ] - [ get_class_methods() ] - [ foreach() ]

Más información

Vea también: [ Funciones de Clases y Objetos ]

Crear un Objeto dinámicamente

En PHP es posible crear un Objeto dinámicamente sin necesidad de haber creado una Clase que lo defina usando la Clase predefinida de PHP stdClass, tal y como te enseñamos en el siguiente ejemplo:

<?php
    // Creamos un Objeto de forma dinámica:
    $objeto = new stdclass;

    // Añadimos propiedades al Objeto:
    $objeto->nombre = "Pedro";
    $objeto->edad   = 33;
    $objeto->ciudad = "Madrid";
    $objeto->pais   = "España";
    $objeto->observaciones = "Mi pasión es la informática";

    echo "Nombre: [".$objeto->nombre."]<br/>";
    echo "Edad: [".$objeto->edad."]<br/>";
    echo "Ciudad: [".$objeto->ciudad."]<br/>";
    echo "País: [".$objeto->pais."]<br/>";
    echo "Observaciones: [".$objeto->observaciones."]<br/>";
?>

Descargar ejemplo

Crear objeto de forma dinámica

Aunque esta es una forma rápida de crear un Objeto en PHP, en lo posible te recomendamos crear una Clase en un archivo .php lo cual nos ofrecerá entre otras ventajas el poder reutilizar el código PHP sin necesidad de tener que volver a escribirlo en otras partes de nuestra página o aplicación web.

Funciones de Clases y Objetos

Algunas funciones para el manejo de Clases y Objetos son (algunas de ellas ya las hemos usado anteriormente):

  • class_exists(): comprobar si una existe una determinada Clase.
  • get_class_methods(): devuelve los nombres de los métodos de una Clase.
  • get_class_vars(): devuelve los nombres de las propiedades o atributos de una Clase.
  • get_class(): devuelve el nombre de la Clase.
  • get_object_vars(): devuelve el nombre de las propiedades o atributos de un Objeto.
  • get_parent_class(): devuelve el nombre de la Clase padre.
  • is_a(): usada para comprobar si un Objeto es una instancia de una determinada Clase, o si ésta se encuentra entre las Clases padre de la cual ha sido instanciado.
  • is_subclass_of(): usada para comprobar si un Objeto en PHP tiene una determinada Clase padre.
  • method_exists(): comprueba si una Clase en PHP dispone de un determinado método.
  • property_exists(): comprueba si Objeto o Clase tienen una determinada propiedad o atributo.
Más información

Vea también: [ Funciones de Clases y Objetos ]

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso