informaticaPC

Tutorial de PHP

Acceder a miembros de clases y objetos, clases abstractas, serializar objetos en PHP


Regístrate

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

Acceder a miembros de Clases y Objetos

Definiendo las propiedades y métodos de una Clase en PHP como static podremos acceder a ellos sin necesidad de crear una instancia de la misma (sin tener que crear un Objeto).

Para acceder a los miembros de una Clase usaremos las siguientes palabras reservadas:

  • self: acceder a las propiedades definidas como const o static en la propia Clase, así como a sus métodos (aunque no sean de tipo static).
  • parent: acceder a las propiedades definidas como const o static de la Clase padre, así como a sus métodos (aunque no sean de tipo static).

    NOTA: de usarse con el nombre de la Clase se devolverá un mensaje de aviso (warning) si la opción de configuración E_STRICT en PHP se encuentra habilitada.

  • $this: usado para acceder a los métodos y propiedades no estáticos de la propia Clase o de su Clase Padre, siendo usado tanto desde una Clase como desde un Objeto.

A continuación te mostramos un ejemplo:

<?php

    class Clase1
    {

        public $variable_1 = "CLASE1";
        const CONSTANTE_1 = 11;
        static $variable_estatica_1 = 22;
        static $variablex = "*****";

        function Clase1() {
        }

        public function metodo_publico() {
            echo "Estoy en el método público de 'Clase1', la variable vale [".$this->variable_1."] y la variable estática vale[".self::$variable_estatica_1."]<br />";
        }

        static function metodo_estatico() {
            echo "Estoy en el método estático de 'Clase1', la variable estática vale[".self::$variable_estatica_1."] (no se puede acceder a la propiedad pública).<br />";
        }

    }

    // ----------------------------------

    class Clase2 extends Clase1
    {

        public $variable_2 = "CLASE2";
        const CONSTANTE_2  = 33;
        static $variable_estatica_2 = 44;
        static $variablex = "-----";

        function Clase2() {
        }

        public function mostrar()
        {

            echo "Accediendo a la constante de 'Clase1' desde 'Clase2', usando el nombre de 'Clase1' (::) -> [".Clase1::CONSTANTE_1."]<br />";
            echo "Accediendo a la variable estática de 'Clase1' desde 'Clase2', usando el nombre de 'Clase1' (::) -> [".Clase1::$variable_estatica_1."]<br />";
            echo "Accediendo a la variable estática que se repite, desde 'Clase2' usando el nombre de 'Clase1' (::) -> [".Clase1::$variablex."]<p />";

            echo "<p>----------------------------------------------</p>";

            echo "Accediendo a la constante de 'Clase1' desde 'Clase2' (parent) -> [".parent::CONSTANTE_1."]<br />";
            echo "Accediendo a la variable estática de 'Clase1' desde Clase2' (parent) -> [".parent::$variable_estatica_1."]<br />";
            echo "Accediendo a la variable estática que se repite, en 'Clase1' desde 'Clase2' (parent) -> [".parent::$variablex."]<p />";

            echo "<p>----------------------------------------------</p>";

            parent::metodo_publico();
            parent::metodo_estatico();

            echo "<p>----------------------------------------------</p>";

            echo "Accediendo a la variable estática de 'Clase1' desde Clase2' (self) -> [".self::$variable_estatica_1."]<br />";
            echo "Accediendo a la variable estática que se repite, desde 'Clase2' (self) -> [".self::$variablex."]<p />";

            echo "<p>----------------------------------------------</p>";

            echo "Accediendo a la variable pública de 'Clase1' desde 'Clase2' (this) -> [".$this->variable_1."]<br />";
            echo "Accediendo a la variable pública de 'Clase2' (this) -> : [".$this->variable_2."]<br />";
            echo "Accediendo a la constante de 'Clase2' (self) -> [".self::CONSTANTE_2."]<br />";
            echo "Accediendo a la variable estática de 'Clase2' (self) -> [".self::$variable_estatica_2."]<br />";
            echo "Accediendo a la variable estática que se repite, desde 'Clase2' (self) -> [".self::$variablex."]<br />";

            echo "<p>----------------------------------------------</p>";

            echo "<p><b>NOTA</b>: si usamos 'self' para acceder a miembros que no existen en la clase actual pero sí en su clase padre,<br/> se accederá también a ellos:</p>";

            echo "Accediendo a la constante de 'Clase1' desde 'Clase2' (self) -> [".self::CONSTANTE_1."]<br />";
            self::metodo_publico();
            self::metodo_estatico();

        }

    }

    // ----------------------------------

    $objeto = new Clase2();
    $objeto->mostrar();

?>

Descargar ejemplo

El resultado que obtendríamos sería:

static, parent, self, this

Más información

Vea también: [ static ] - [ Class ] - [ parent ] - [ Operador de Resolución de Ámbito (::) ]

Información

RECUERDA: si usamos self para acceder a métodos o propiedades que no existen en la clase hijo pero sí en la clase padre, se accederá a ellos como si usáramos parent.

Crear una clase abstracta en PHP

Para aprender qué son las Clases abstractas en Programación Orientada a Objetos, consulta el enlace al final de la sección.

OperacionAritmetica.php:

<?php
    abstract class OperacionAritmetica
    {
        // Propiedades
        private $numero1 = null;
        private $numero2 = null;

        // Constructor:
        function OperacionAritmetica() {
        }

        // Métodos comunes:

        public function getNumero1() {
            return $this->numero1;
        }

        public function setNumero1($numero1) {
            $this->numero1 = $numero1;
        }

        public function getNumero2() {
            return $this->numero2;
        }

        public function setNumero2($numero2) {
            $this->numero2 = $numero2;
        }

        // Métodos que serán redefinidos:

        abstract protected function realizarOperacion();
    }
?>

Sumar.php:

<?php
    // Incluimos el archivo con la definición de la Clase de la que heredamos
    require_once("OperacionAritmetica.php");

    class Sumar extends OperacionAritmetica
    {
        // Constructor:
        function Sumar() {
        }

        // Métodos redefinidos :

        public function realizarOperacion() {
            return $this->getNumero1() + $this->getNumero2();
        }
    }
?>

Restar.php:

<?php
    // Incluimos el archivo con la definición de la Clase de la que heredamos
    require_once("OperacionAritmetica.php");

    class Restar extends OperacionAritmetica
    {
        // Constructor:
        function Restar() {
        }

        // Métodos redefinidos :

        public function realizarOperacion() {
            return $this->getNumero1() - $this->getNumero2();
        }
    }
?>

04_objetos_clase_abstracta.php:

<?php
    // Incluimos el archivo con la definición de la Clase usada
    require_once("Sumar.php");
    require_once("Restar.php");

    $objSumar = new Sumar();
    $objSumar->setNumero1( 22 );
    $objSumar->setNumero2( 33 );

    $objRestar = new Restar();
    $objRestar->setNumero1( 22 );
    $objRestar->setNumero2( 33 );

    echo "La suma de los dos números es : [".$objSumar->realizarOperacion()."]<br/>";    // Devuelve: [55]
    echo "La resta de los dos números es: [".$objRestar->realizarOperacion()."]<br/>";   // Devuelve: [-11]
?>

Descargar ejemplo

Clases abstractas en PHP

Más información

Vea también: [ Abstracción de Clases en PHP ]

Serializar Objetos en PHP

En determinadas ocasiones es posible que necesitemos serializar un Objeto para así por ejemplo guardarlo en un archivo de texto o en una tabla de una base de datos, o bien propagarlo en una sesión (necesario dependiendo de la configuración de PHP).

Para serializar un Objeto usaremos la función de PHP serialize(), que devuelve una cadena de texto con la representación del mismo, y para volverlo a convertir en un Objeto usaremos unserialize().

En el siguiente ejemplo serializamos un Objeto en PHP y lo pasamos en la sesión.

Persona.php:

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

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

        // Constructor:
        function Persona() {
        }

        // Métodos:

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

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

        function getApellidos() {
            return $this->apellidos;
        }

        function setApellidos( $apellidos ) {
            $this->apellidos = $apellidos;
        }
    }
?>

05_serializar_objetos_1.php:

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

    // Iniciar la sesión
    session_start();

    // Crear una instancia del objeto:
    $objPersona = new Persona();
    $objPersona->setNombre("MARTINA");
    $objPersona->setApellidos("MARRERO MEDINA");

    // Variables de sesión:
    $_SESSION['usuario'] = serialize($objPersona);

    echo "PÁGINA PRINCIPAL<br />";
    echo "================<p />";

    echo "<a href='05_serializar_objetos_2.php'>Ir a la otra página</a><br/>";
?>

05_serializar_objetos_2.php:

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

    session_start();  // Continuar la sesión

    if( isset($_SESSION['usuario']) == true )
    {
        echo "COMPROBAR LOS VALORES<br />";
        echo "=======================<p />";

        echo "Objeto serializado:<p/>";
        echo $_SESSION['usuario']."<br/>";
        echo "------------------------<p/>";

        $_SESSION['usuario'] = unserialize($_SESSION['usuario']);

        echo "Conversión a Objeto correcta:<p/>";
        print_r( $_SESSION['usuario'] );

        echo "<p>------------------------</p>";

        // Mostrar información del objeto en la sesión:
        echo "Nombre: [".$_SESSION['usuario']->getNombre()."]<br/>";
        echo "Apellidos: [".$_SESSION['usuario']->getApellidos()."]<p/>";
    }
    else
    {
        echo "<p>No has pasado por la página principal</p>";
    }

    echo "<a href='05_serializar_objetos_1.php'>Volver a la página principal</a>";
?>

Descargar ejemplo

Serializar Objetos en PHP

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