Programación Orientada a Objetos en PHP
PHP incorpora programación orientada a objetos, con todas las ventajas que este paradigma ofrece.
Definir una clase
Una clase se puede considerar como una colección de propiedades y de métodos que acceden a esas propiedades.
- class: para declarar una clase en PHP se usa class.
- propiedades: las propiedades de la clase se definen anteponiendo var al nombre de la propiedad.
- métodos: los métodos se definen como funciones normales.
- $this: para referirnos al objeto o a propiedades dentro de la clase emplearemos $this-> seguido de la propiedad.
- constructor: las clases que tienen un método constructor llaman a este método cuando se crea un nuevo objeto, para inicializar propiedades. El constructor se define igual que los demás métodos y su nombre será __construct() o bien el mismo nombre que la clase.
<?php class Perro { // propiedades var $nombre; var $peso = 0; // podemos emplear parametros por defecto var $raza; // constructor function __construct($_nombre, $_peso, $_raza) { $this->nombre = $_nombre; $this->peso = $_peso; $this->raza = $_raza; } // metodo que incrementa el peso function Suma($incremento) { $this->peso += $incremento; } // metodo que devuelve una cadena con las propiedades function toString() { return ("Nombre: ".$this->nombre.", Peso: ".$this->peso. ", Raza: ".$this->raza); } } ?> |
Crear un objeto
Para crear un objeto lo definimos con new y lo asignamos a una variable.
<?php // crea un nuevo objeto de la clase Perro $toby = new Perro(); ?> |
Si hemos definido un constructor podemos asignar valores a las propiedades del objeto al crearlo:
<?php // creamos al Labrador Toby con 45 kg de peso $toby = new Perro("Toby", 45, "Labrador"); ?> |
Acceder a un objeto
Para utilizar una propiedad o un método de un objeto la sintaxis es:
<?php // sumamos 5 kg al peso de Toby $toby->Suma(5); // mostramos las propiedades de Toby utilizando el metodo toString echo $toby->toString(); // mostramos las propiedades de Toby accediendo a sus datos directamente echo "Nombre: ".$toby->nombre.", Peso: ".$toby->peso.", Raza: ".$toby->raza; ?> |
Extender una clase
Una clase puede ser una extensión de otra clase. La clase extendida o derivada tiene todas las variables y funciones de la clase base ("herencia") y lo que se agregue en la definición extendida. Esto también se conoce como una relación "padre-hijo": la clase hija está basada en la clase padre. Para extender una clase usaremos extends.
Veamos un ejemplo. Este código define la clase extendida Carrito_Con_Propietario que tiene todas las variables y funciones de Carrito más una variable adicional ($propietario) y una función adicional (definir_propietario()):
<?php class Carrito_Con_Propietario extends Carrito { var $propietario; function definir_propietario($nombre) { $this->propietario = $nombre; } } ?> |
Por ser Carrito_Con_Propietario una clase hija de Carrito, es posible usar las variables y funciones de Carrito sobre los Carrito_Con_Propietario:
<?php $carrito = new Carrito_Con_Propietario; // crear un carrito con propietario $carrito->definir_propietario("bob"); // nombre del propietario echo $carrito->propietario; // imprimir el propietario $carrito->agregar_item("10", 1); // funcionalidad heredada de Carrito ?> |
La clase padre debe ser definida antes de ser extendida: antes de definir la clase Carrito_Con_Propietario debemos definir la clase Carrito.
También es posible extender una clase hija y crear otra clase basada en ella. Por ejemplo, podemos definir la clase Carrito_Amarillo_Con_Propietario basada en la clase Carrito_Con_Propietario.
Recursos
- Ayuda de PHP: Classes and Objects