Documentación oficial
Antes de comenzar a leer libros de diferentes autores, de las mejores cosas que se pueden hacer es echar un vistazo y leer la documentación oficial del lenguaje de programación que estemos estudiando, ya que va a ser nuestra mejor amiga.
Una de las ventajas de PHP es que la toda la documentación la tenemos en idioma español, la podemos encontrar en el siguiente enlace:
Clases en PHP
Veamos el ejm de sintaxis de una clase PHP
Ejm
<?php class NombreClase { var $un_atributo; function un_metodo(){ } } ?>
Buenas prácticas
Una de las cosas que podemos hacer con PHP (muy criticado en ocasiones) es que podemos mezclar HTML con PHP, lo que se vuelve algo enrevesado. Lo que tendríamos que hacer es generar páginas con puro código PHP.
Otra muy buena práctica, los nombres de clases siempre van a ir en UpperCamelCase (la primera letra de cada palabra en MAYÚSCULAS). Para crear atributos ponemos la palabra reservada var y después el signo de dólar ($) seguido del nombre del atributo. La palabra var como tal no va a ser tan necesaria cuando veamos los modificadores de acceso. Los métodos siempre se crean con la palabra reservada function seguida del nombre del método, los paréntesis y las llaves, donde escribiremos el código a ejecutar.
Nota: Como curiosidad, PHP significa Personal Home Page.
Instanciar una clase
Para instanciar una clase debemos utilizar la siguiente sintaxis.
Ejm
$objeto = new nombreClase();
De esa manera estamos creando un objeto dependiente de la clase nombreClase que creamos en el ejm de más arriba.
Herencia de clases
Los objetos pueden heredar propiedades y métodos de otros, mediante la extensión (herencia) de clases, cuya característica representa la relación existente entre diferentes objetos. Para definir una clase como extensión de otra en PHP se utiliza la palabra reservada extends. La herencia en PHP se da de una clase a otra, es decir, una clase sólo puede heredar las características de otra clase madre. En PHP no existe lo que se denomina herencia múltiple, es decir, una clase no puede heredar de 2 o más clases padre, sin embargo, sí que ofrece un mecanismo denominado interface que hace la función de herencia múltiple como existe en otros lenguajes de programación.
Ejm
<?php class ClasePadre { // CLASE PADRE var $atributo; function metodo(){ } } class ClaseHija extends ClasePadre { /* ESTA CLASE HEREDA TODOS LOS MÉTODOS Y PROPIEDADES DE LA CLASE PADRE ClasePadre */ } ?>
La clase hija puede acceder a todos los métodos y propiedades de la clase padre, dependiendo su modificador de acceso (dependiendo de su privacidad). Por ejm una clase hija no puede ver un recurso privado de una clase padre, pero sí que puede ver un recurso protegido o un recurso público.
Tipos de clases
En PHP podemos encontrar diferentes tipos de clases:
- Clases normales
- Clases abstractas
- Clase final
Clases abstractas
Las clases abstractas son aquellas que no necesitan ser instanciadas, es decir, no se necesita crear un objeto para poder utilizarlas, pero, sin embargo serán heredadas en algún momento. Su finalidad es la de declarar clase genéricas que necesitan ser declaradas, pero a las cuales no se puede otorgar una definición precisa. Es posible también declarar métodos abstractos.
Esta es la sintaxis que se debe utilizar para declarar una clase abstracta.
Ejm
<?php abstract class ClaseAbstracta { var $atributo_abstracto; function metodo_abstracto(); } ?>
Cuando una clase tiene métodos abstractos, dichos métodos tienen que ir sin cuerpo, es decir, no tendrán el cuerpo que se incluye entre las llaves que es el código que se ejecutará en el caso de llamar al método de la clase, esta es la diferencia entre una clase instanciable y una clase abstracta, las clases abstractas sólo van a tener declarados los nombres de los métodos, la programación de dichos métodos se desarrollaría en la clase que herede esta clase abstracta. Las clases abstractas nos sirven a manera de modelo de otras clases.
Nota: No se pueden definir la programación de los métodos en una clase abstracta, será en su clase hija donde se defina toda su programación. Tampoco se pueden generar objetos de esta clase, es decir, no se pueden instanciar las clases abstractas.
Clase final
Las clases finales no pueden ser heredadas por otras, es por ello que se denominan clases finales. Se definen anteponiendo la palabra clave final, de la siguiente manera:
Ejm
<?php final class ClaseFinal { var $atributo_final; function metodo_final(); } ?>
Que tipo de clase debo declarar
Clase que pueda | Instanciable | Abstracta | Heredada | Final |
---|---|---|---|---|
Ser instanciada y/o heredada (las comunes) | Sí | No | No | No |
Guardar relación con método y atributos de otra | No | No | Sí | No |
Servir de modelo para otras, sin que pueda instanciarse | No | Sí | No | No |
Instanciarse pero que no pueda ser heredada | No | No | No | Sí |