Veo en esta comunidad una gran laguna respecto a la programación orientada a objectos en PHP, así que visto esto me he decidido a crear un pequeño tutorial, por supuesto no esta totalmente completo, pero intentare explicar lo mas fundamental al crear una clase en PHP.
Lo primero, hay una gran diferencia respecto a la programación orientada a objetos (A partir de este momento la llamaremos POO) en PHP4 y en PHP5. Este tutorial esta hecho respecto a mis conocimientos en POO para la version 5 de PHP.
¿Que es una clase, o que es la POO?La POO, como ya he repetido en numerosas ocasiones, es parecido a un conjunto de funciones, que interactúan entre si, en un mismo objeto. ¿Que es un objeto? Un foro, un carrito de la compra, una noticia... cualquier cosa.
Básicamente las clases definen las posibilidades de modificar al propio objeto.
Como un ejemplo voy a poner la clase del objeto "Carrito de compra".
Esta clase debe tener todas las posibilidades que se podrían hacer con mi carrito, dividido en funciones.
Una función para agregar un articulo, una función para eliminar un articulo, una función para vaciar completamente mi
carrito de la compra, etc.
Al fin y al cabo, como definición yo diria:
Una clase es un conjunto de funciones (denominados métodos) que marcan las distintas opciones de modificación de un objeto.Definir una clase, definir variables, y propiedades de las funciones/variablesLo mas importante sin duda es crear la propia clase, y darle nombre, es algo realmente sencillo, vamos allá.
class MiClase {
// Aquí irían el conjunto de funciones.
}
Definir una variable dentro de una propia clase, es realmente sencillo, pero para eso, primero necesitamos saber su propiedad dentro de la clase.
Hay varias propiedades que una variable o un método pueden utilizar, pero en este ejemplo solo mostrare dos de ellas.
public: Propiedad publica, esto quiere decir que la variable o método definida puede ser usada dentro de la propia clase o fuera de ella. Para que lo entendáis.
<?php
class MiClase {
public $variable = "Hola mundo";
}
$objeto = new MiClase();
echo $objeto->variable; // Esto mostraría "Hola mundo"
?>
private: Propiedad privada, esto quiere decir que la variable o método solo puede ser usada dentro de la propia clase.
Ejemplo:
<?php
class MiClase {
private $variable = "Hola mundo";
}
$objeto = new MiClase();
echo $objeto->variable; // Esto daría error, pues $variable, esta definida como private, por lo que solo podría modificarse en la propia clase del objeto.
?>
Definir un método en una clase es muy parecido a definir una función común en PHP, salvo que debes indicar su propiedad. Ejemplo:
<?php
class MiClase {
private $variable = "Hola mundo";
public function Mostrar() {
echo $this->variable;
}
}
$objeto = new MiClase();
$objeto->Mostrar(); // Esto mostraría "Hola mundo", pues la función esta definida como publica, pero si estuviera definida como private, daría error, pues solo se podría acceder desde la propia clase.
?>
NOTA: La variable $this hace referencia a un método o variable definida dentro de la propia clase, así pues, para acceder a el método Mostrar dentro de la clase MiClase, habría que hacer $this->Mostrar();
Ya sabemos definir métodos y variables en nuestra propia clase.
Pero ahora viene el mundo de los métodos predefinidos. En POO, hay unos métodos que puedes incluir opcionalmente en tu clase (a partir de ahora los llamaremos métodos por defecto) que llevan un nombre especial, definido por PHP.
Dos muy famosas de este tipo son los métodos
constructores y
destructores.
Por el momento solo nombraré los métodos por defecto
constructor y
callTodos los métodos por defecto empiezan por dos barras bajas (__) y a continuación el nombre del método.
Los métodos por defectos no usan propiedades (No debe indicarse public, protected, etc.)
El método por defecto constructor es un método que define si queremos utilizar argumentos a la hora de crear un objeto.
Hasta ahora no hemos usado ningún argumento (Recuerde que solo hicimos $objeto = new MiClase()

pero es posible definir argumentos, y que hacer con ellos, gracias a este método, llamado "construct".
Observemos esta clase.
<?php
class MiClase {
private $variable; // La definimos vacía
function __construct($var) {
$this->variable = $var;
}
public function Mostrar() {
echo $this->variable;
}
}
$objeto = new MiClase("Esta es mi variable");
$objeto->Mostrar(); // Esto mostraría en pantalla "Esta es mi variable"
?>
El método por defecto call, sin embargo, es totalmente diferente al método por defecto construct.
Cada uno se caracteriza por una cosa, y en este caso, call se caracteriza por poder procesar el código que queramos cuando llamamos a un método que no existe. De esta forma, podemos guardar en un fichero .txt un error de sintaxis, comunicando que el método que llamamos no existe, o simplemente hacerlo ver en el monitor mediante la función echo.
call se define como __call($metodo, $argumentos)
$metodo corresponde al nombre del método que hemos llamado ($objeto->Mostrar(); Con esto llamamos al metodo Mostrar, por lo que $metodo seria "Mostrar") y $argumentos contiene los argumentos escritos en el metodo que no existe.
He aquí un ejemplo.
<?php
class MiClase {
private $variable = "Hola Hola!";
function __call($metodo, $argumentos) {
echo "El método que has llamado (".$metodo.") no existe";
}
public function Mostrar() {
echo $this->variable;
}
}
$objeto = new MiClase();
$objeto->MostrarE(); // Aff!! en lugar de escribir Mostrar(), el programador se equivoco y escribió MostrarE(), como el método MostrarE no existe, automáticamente se llama a el método call, y este dejara ver este mensaje: "El método que has llamado (MostrarE) no existe"
?>
Por el momento, esto es todo lo que puedo explicaros hoy, ha sido un largo rato escribiendo, y me gustaria mucho seguir escribiendo esta "Guia" en otra ocasion, que sin duda llegara.
Mientras tanto, estoy atento a sus preguntas, comentarios, sugerencias y correcciones de esta guia de POO.
Un saludo!