PHP y Programación orientado a objetos

PHP a partir de su versión 5 viene incorporado con la capacidad de programar con el paradigma de la programación orientada a objetos. Así el manejo de los objetos en PHP5 a sido mejorada pues ya se tiene un modelo de objetos completo. De esta forma PHP a seguido la tendencia de la mayoría de los lenguajes de programación, adoptar la POO (Programación Orientada a Objetos).

Así es PHP ahora ofrece las funcionalidades de la POO, esta es una programación avanzada y muy extendida donde la parte principal son las Clases, un clase es la plantilla mediante la cual se crean Objetos. Los objetos son ejemplares de una clase determinada que poseen atributos y funciones que se definen en la clase.

Cómo definir una clase, propiedades y métodos

Como ya hemos mencionado antes una clase en un molde o plantilla que sirve de base para la creación de objetos. Al definir una clase debemos incluir sus propiedades y métodos tendrán los objetos.

Las propiedades se refieren a las características de  una clase, se las puede llamar variables con un valor inicial.

Las Clases (Class)

Para poder definir una clases lo haremos usando la palabra reservada class. Luego escribimos el nombre de la clase seguida de unas llaves para luego escribir sus propiedades y métodos. Por cierto, el nombre de la clase no debe ser una palabra reservada de PHP. Asimismo debe empezar por un guión abajo o una letra.

Veamos un ejemplo de como definir una clase:

<?php
class NombreClase
{
    // Declaración de una propiedad o variable
    public $mivar = 'un valor predeterminado';

    // Declaración de un método o función
    public function mostrarVariable() {
        echo $this->mivar;
    }
}
?>

Ahora una breve explicación del código de arriba:

A partir de la línea 2 estamos definiendo la clase, en el ejemplo llamada NombreClase, dependiendo con que trabajarás elegirás un nombre apropiado. Por ejemplo para una empresa de venta de automóviles una de las clases sería Auto también estarías los Empleados, Clientes, etc.

En la línea 5 estamos declarando una variable pública de nombre $mivar al cual se le puede asignar cualquier valor que desees o dejarlo vacío.

En la línea 8 definimos un método público llamado mostrarVariable, sin parámetros o valores que necesite, que me muestra el valor de la variable $mivar. En este caso hemos usado la pseudovariable $this que está disponible cuando un método es invocado dentro del contexto de un objeto.

Creación de una instancia de una clase

Para crear un objeto a partir de una clase se debe usar la palabra new. Este se creará si tiene un constructor. Por regla general las clases deben ser definidas antes de instanciarlas.

Veamos un ejemplo de cómo crear un instancia

<?php
$instancia = new NombreClase();

// Esto también se puede hacer con una variable:
$miClase= 'NombreClase';
$instancia = new $miClase(); // new NombreClase()
?>

Como puede observar se instancia una clase directamente como en la línea 2. Pero también se puede instancias primero asignando a una variable el nombre de la clase para luego instanciarla con new, como lo muestra las líneas 5 y 6.

Creación de nuevos objetos

La versión PHP 5.3.0 permite crear objetos de otras formas.

<?php
class Carro
{
    static public function getNew()
    {
        return new static;
    }
}

//La clase Auto es una clase hija que se extiende a la clase padre Carro
class Auto extends Carro
{}

$obj1 = new Carro();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);//el resultado es true, pues son objetos distintos

$obj3 = Carro::getNew();
var_dump($obj3 instanceof Carro);//el resultado es true pues $obj3 es instancia de la clase padre Carro

$obj4 = Auto::getNew();
var_dump($obj4 instanceof Auto);//el resultado es true, pues $obj4 es instancia de la clase hija Auto
?>
Las propiedades y métodos

En lo referente a propiedades y métodos de una clase es importante mencionar que pueden tener un mismo nombre pues se guardan en espacios distintos. Así mismo la referencia a ambas es igual.

Veamos un ejemplo donde vemos la forma de referenciarlas:

class Persona
{
    public $talla = '1.65';//propiedad
    public $peso='60';
    
    public function peso() {
        return '70';//método
    }
}

$obj = new Persona();
echo $obj->peso, PHP_EOL, $obj->peso(), PHP_EOL;

En el ejemplo observe que la propiedad peso tiene el mismo nombre que el método peso y que para hacer referencia a ella la diferencia es los paréntesis en el caso de los métodos. También la palabra PHP_EOL es para dar un salto de línea(quienes trabajan con html prefieren usar <br>).

Herencia de una clase

Una clase es capaz de heredar las propiedades y métodos de otra. Para ello utilizamos la palabra reservada extends cuando la declaramos.

Los métodos y propiedades podrían ser reescritos a menos que al ser declarados en su clase tengan la palabra final. Esto a diferencia de los constructores que sí permiten sobrescritura con diferentes parámetros.

Veamos un ejemplo de herencia de clases:

<?php
class ClaseHija extends ClasePadre
{
    // Redefinición del método padre
    function mostrarVar()
    {
        echo "Clase hija que es extendida\n";
        parent::mostrarVar();
    }
}

$extendida = new ClaseHija();//clase extendida
$extendida->mostrarVar();
?>

Referencia: Los ejemplos y conceptos han sido tomados en base al manual oficial de PHP que puede encontrar en este enlace http://php.net/manual/es/language.oop5.basic.php

Deja un comentario