| Curso de PHP y MySQL José Gómez Castaño |
|
ClasesEl uso de clases se ha mejorado mucho en PHP 5. La programación orientada a objetos es un paradigma de programación extendido en los últimos años y en los que se basan los lenguajes de desarrollo modernos. Este paradigma permite definir las características y funcionalidades en una "plantilla", a partir de la cual, se pueden crear objetos que las posean. A partir de una Clase, se pueden crear Objetos. Las variables definidas en la clase son los Atributos, y las funciones, los Métodos.Con esto coseguimos encapsular la lógica que involucra a los atributos de forma que no son accesibles fuera de la clase, a menos que se utlice la lógina definida en la misma. Las clases deben ser estables y reutilizables. Un cambio en una clase afecta a otras, debemos tener cuidado con esto. Un tipo especial de método es el Constructor. Esta es una funcion, cuyo nombre coincide con el de la clase, y contiene el código que queremos que se ejecute al instanciarse el objeto. Otra manera de definir un constructor es crear un método con el nombre function __construct. De la misma manera, se puede declarar un método Destructor. Este será una función que se ejecutará cuando se destruya el objeto, bien asignándole el valor null o acabando el script. La sintaxis es function __destruct().
<?php
class persona{
// Atributos
var $nombre;
var $apellido;
var $edad;
var $departamento;
var $rol;
// Constructor de la clase mediante function persona($nom,$ape) o
function __construct($nom,$ape){
$this->nombre = $nom;
$this->apellido = $ape;
}
// Métodos
function setEdad($edad){
$this->edad = $edad;
}
function getEdad(){
return $this->edad;
}
function getNombreCompleto(){
return $this->nombre." ".$this->apellido;
}
// Destructor
function __destruct() {
echo "se acabó";
}
}
?>
Para utilizar una Clase, debemos Instanciarla en un objeto. Esto consiste en crear una copia de la clase en la que se almacenan los valores en los atributos y estos se manipulan a través de los métodos.
<?php
// Incluimos el fichero donde se encuentra la clase
require("persona.php");
// Instanciamos el objeto
$adm = new persona("pepe","gomez");
// Acceso a un atributo
$adm->edad = 42;
// Acceso a un método
echo $adm->getNombreCompleto();
?>
Propiedades Herencia: Una clase puede crearse a partir de otra, heredando sus métodos y propiedades. De esta manera, podrán definirse otras propiedades y métodos, que tendrán uso sólo en la nueva clase, permitiendo usar los de la clase padre. Si se antepone la palabra final al nombre de la clase, esta no podrá ser heredada (final class persona). Sobrecarga: Podemos extender una clase de otra y sobreescribir alguno de sus métodos. Con esto podemos dar una nueva funcionalidad a un método que sea particular a la nueva clase. Si no queremos que se sobre escriba algún método en una clase, se le puede anteponer la palabra final en la declaración del método en la clase padre. El método __construct no se puede sobrecargar. Polimorfismo: Se trata de tener varias clases con el mismo nombre, pero con diferentes métodos.
<?php
// Con la palabra extends hacemos que una clase herede de otra
class cliente extends persona{
var $empresa;
// sobrecarga del método
function getNombreCompleto(){
return strtoupper($this->nombre." ".$this->apellido);
}
}
?>
Visibilidad La visibilidad de una propiedad o método puede ser definida al anteponerle a la declaración con las palabras reservadas: public, protected o private. Los elementos declarados con Public pueden ser accesados en todos lados. Los Protected limitan el acceso a las clases heredadas (y a la clase que define el elemento). Los Private limitan la visibilidad solo a la clase que lo definió. Si un método se declara como Static, este podrá ser accedido desde fuera de la clase sin tener que instanciar un objeto, como si se tratara de una función tradicional. Para acceder a un método declarado Static de una clase sin tener que crear un objeto de la misma, debemos usar la sintaxis nombreClase::nombreMetodo(); Los objetos creados pueden almacenarse en una variable de sesión, pero en cada página hay que incluir el archivo donde se declara la clase para tener acceso a sus atributos y métodos. interfaces Una interfaz es una clase en la que se declaran unos métodos, pero no se implementan. Estos son implementados en otra clase.
<?php
// declaración del interfaz
interface intEmpresa{
function setCargo($idPersona,$idCargo);
function setSueldo($idPersona,$sueldo);
}
// Implementación del interfaz en una clase
class empresa implements empresa{
function setCargo($idPersona,$idCargo){
//logica
}
function setSueldo($idPersona,$sueldo){
//logica
}
}
?>
Patrones de DiseñoLos Patrones se han introducido en PHP5. Estos son formas de implementar soluciones de desarrollo ya afianzadas por la experiencia. A continuación se presentan algunos ejemplos de ellos. Un artículo en profundidad se puede encontrar en Five Common Design Patterns, de IBM. Patrón Modelo Vista Controlador (MVC) MVC es un Patrón de diseño. El Patrón Modelo-Vista-Controlador se puede implementar en PHP. Para ello debemos crear un framework que encapsule esta arquitectura de desarrollo. Lo que buscamos es separar los datos, del interfaz de usuario y la lógica de la aplicación. Existe documentación extensa sobre MVC en diferentes lenguajes..
Uno de los objetivos de esta arquitectura de software es mantener separados los componentes de la aplicación, a fín de hacer más fácil su mantenimiento. El Modelo se encarga de gestionar el acceso a los datos, el Controlar gestiona las peticiones y devuelve las peticiones a la vista. Esta visualiza el resultado de las consultas. Patrón Factory Ya hemos visto más arriba una forma de instanciar objetos a partir de una clase. Otra forma de hacerlo es a través del patrón Factory. Este, se basa en tener una clase que sea la "factoría" que proporciona los objetos. Para ello debemos crear una clase abstracta que posea un método estático. Este será el encargado de instanciar la clase solicitada y devolvernos el objeto buscado. A continuación un ejemplo.
<?php
abstract class personaFactory
{
public static function crear($clase)
{
return new $clase;
}
}
?>
El uso del Patrón Factory nos permite tener varias clases que tienen la misma funcionalidad, pero la lógica que implementan es diferente. Pro ejemplo podemos tener una factoría que nos devuelva objetos de acceso a datos, que implementen los interfaces de Alta, Baja, Modificación y Consulta, pero una de ellas para acceso a Oracle, otra a MySQL y otra que nos lo devuelva al acceder a un WebService. Son una forma eficaz de implementar MVC El uso de la factoría será el siguiente
<?php
// Incluimos el fichero donde se encuentra la clase
require("class.personaFactory.php");
require("class.persona.php");
// Instanciamos el objeto
$adm = personaFactory::crear(persona("pepe","Gomez"));
// Acceso a un atributo
$adm->edad = 42;
?>
Patrón Singleton El uso de este patrón impide que una clase sea instancia más de una vez, cada instancia reutiliza los recursos de la original. Para conseguirlo, el constructor de la clase debe ser declarado privado, y para crear la instancia, se implementa un método declarándolo Static. |

Curso PHP y MySQL by José Gómez Castaño is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.
Based on a work at www.meridi.es/cursos/php.