PHP Orientado a Objetos for Beginners

Balu23 Julio 2010 - 10:58pm 7 comentarios
Enviar por Email Imprimir

PHP Orientado a Objetos for Beginners

Buscando artículos de calidad para compartir con ustedes, encuentro un reciente y magnífico artículo (“Object-Oriented PHP for Beginners”) extraído del libro Pro PHP and jQuery, que a continuación se los muestro, pero en nuestro idioma. He incluido los ejemplos online, para que podamos apreciarlos mejor. Y es que, para muchos programadores, la programación orientada a objetos es un concepto aterrador, con una sintaxis muy complicada y otros temores.

Así pues, en este artículo aprenderemos los conceptos detrás de la Programación Orientada a Objetos con PHP (PHP OOP), un estilo de programación en el que las acciones relacionadas son agrupadas en clases para facilitar la creación de un código más compacto y efectivo...

¿Qué es la Programación Orientada a Objetos?

La programación orientada a objetos es un estilo de programación que nos permite (a los desarrolladores) agrupar tareas similares en clases. Esto ayudará a que nuestro código mantenga el principio "No te repitas" (en inglés Don't Repeat Yourself o DRY, la wikipedia lo define) y así, mantenerlo fácilmente.

Uno de los mayores beneficios de la programación DRY es que, si una pieza de información cambia en tu programa, usualmente sólo se requerirá un cambio para actualizar el código. Uno de las más grandes pesadillas para los desarrolladores es mantener el código cuando los datos se declaran una y otra vez, lo que significa que cualquier cambio al programa se convierte en un juego, infinitamente más frustrante, que el ¿Dónde está Waldo?, donde hay que atrapar el contenido y funcionalidad duplicada.

OOP es intimidante para muchos de los desarrolladores porque nos introduce a una nueva sintaxis y, a simple vista, parece ser más complejo que el sencillo código estructurado o en línea. Sin embargo, una observación más avispada, nos mostrará que OOP es en realidad un enfoque, en última instancia, sencillo y simple, de programación.

La programación orientada a objetos es un estilo de programación que permite a los desarrolladores agrupar tareas similares en clases.

¿Qué son los Objetos y Clases?

Antes de profundizar en la OOP, debemos tener una comprensión básica de las diferencias entre Objetos y Clases. En esta sección veremos como se construyen las clases, sus diferentes capacidades y algunos usos.

Reconociendo las diferencias entre Objetos y Clases

Objetos y Clases PHP
Fotos de Instant Jefferson y John Wardell

De buenas a primeras, hay una confusión en OOP: Desarrolladores experimentados empiezan a hablar sobre objetos y clases, y estos parecen ser términos intercambiables. Esto no es así, sin embargo, la diferencia puede ser un poco complicada de entender a primera vista.

Una clase, por ejemplo, es como el plano de una casa. Define la forma de la casa en un papel, y establece las conexiones entre las diferentes partes de la casa claramente. Aún cuando la casa todavía no existe.

Un objeto, entonces, es como una casa, construida de acuerdos al plano. Los datos que se almacenan en el objeto son como la madera, cables y concreto que componen la casa: Si la casa se hubiera montado sin un plano, sólo sería una pila de cosas. Sin embargo, cuando todo se junta, se convierte en una organizada y útil casa.

Las clases son la estructura de los datos y acciones, y usan esta información para construir objetos. Más de un objeto puede ser construido de la misma clase y al mismo tiempo; estos objetos son independientes los unos de los otros. Continuando con nuestra construcción analógica, esto es similar a un condominio que puede ser construido con el mismo plano: 150 casas distintas, que lucen igual, pero que tienes diferentes familias y decoraciones por dentro.

¿Cómo se estructura una clase?

La sintaxis para crear una clase es muy sencilla: Declara una clase usando la palabra “class”, seguida del nombre de la clase y un set de llaves ({}):

<?php
class MyClass
{
   
// Los métodos y propiedades de la clase van aquí
}
?>

Después de crear la clase, una nueva clase puede ser instanciada y almacenada en una variable usando la palabra “new”:

<?php
$obj
= new MyClass;
?>

Para ver el contenido de la clase, podemos usar la función var_dump():

<?php
var_dump
($obj);
?>

Prueba este proceso, colocando el siguiente código en un nuevo archivo llamado test.php (en tu localhost):

<?php
class MyClass
{
   
// Los métodos y propiedades de la clase van aquí
}

$obj = new MyClass;

var_dump($obj);
?>

Carga la página en tu navegador en http://localhost/test.php y la siguiente línea debe aparecerte:

1. object(MyClass)#1 (0) { } 

De esta sencilla manera, haz completado tu primer script con OOP.

Definiendo las propiedades de una clase

Para agregar datos a la clase se usan las propiedades, o las variables de una clase específica. Éstas, trabajan exactamente igual que una variable común y corriente, excepto que ellas están enlazadas al objeto y, por lo tanto, sólo se puede acceder a ellas mediante él.

Para añadir una propiedad a MyClass, añade el siguiente codigo en tu script:

<?php
class MyClass
{
    public
$prop1 = "¡Soy la propiedad de una clase!";
}

$obj = new MyClass;

var_dump($obj);
?>

La palabra “public” determina la visibilidad de la propiedad, aprenderás un poco más sobre esto en unos momentos. Luego, la propiedad es llamada usando la sintaxis estándar de una variable, y un valor le es asignado (Aunque, las propiedades de una clase no necesitan de un valor inicial).

Para leer esta propiedad e imprimirla en el navegador, vamos a hacer referencia al objeto que la contiene:

<?php
echo $obj->prop1;
?>

Debido a que pueden existir múltiples instancias de una clase, si el objeto no es referenciado individualmente, el script será incapaz de determinar cual objeto leer. El uso de la flecha (->) es un operador OOP que accede al contenido de propiedades y métodos de un objeto dado.

Modifica el script en test.php para imprimir la propiedad en vez de volcar toda la clase, modificando el código como se muestra:

<?php
class MyClass
{
    public
$prop1 = "¡Soy la propiedad de una clase!";
}

$obj = new MyClass;

echo
$obj->prop1; // Imprime la propiedad
?>

Recarga el navegador y ahora aparecerá lo siguiente:

¡Soy la propiedad de una clase!

Definiendo los métodos de una clase

Los métodos son las funciones de una clase específica. Es decir, que las acciones individuales que un objeto será capaz de realizar, están definidas, dentro de una clase, como métodos.

Por ejemplo, para crear métodos que establecen y obtienen el valor de una propiedad $prop1, añade lo siguiente a tu código:

<?php
class MyClass
{
    public
$prop1 = "¡Soy la propiedad de una clase!";

    public function
setProperty($newval)
    {
       
$this->prop1 = $newval;
    }

    public function
getProperty()
    {
        return
$this->prop1 . "<br />";
    }
}

$obj = new MyClass;

echo
$obj->prop1;
?>

Nota: OOP permite a los objetos referenciarse a si mismos utilizando $this. Cuando trabajamos con un método, usa $this de la misma manera que usarías el nombre del objeto fuera de la clase.

Para usar estos métodos, hay que llamarlos como a cualquier función; pero primero, hay que referenciar al objeto que lo contiene. Imprime la propiedad de MyClass, cambia su valor e imprímelo otra vez, realizando las modificaciones que a continuación se indican.

<?php
class MyClass
{
    public
$prop1 = "¡Soy la propiedad de una clase!";

    public function
setProperty($newval)
    {
       
$this->prop1 = $newval;
    }

    public function
getProperty()
    {
        return
$this->prop1 . "<br />";
    }
}

$obj = new MyClass;

echo
$obj->getProperty(); // Imprime el valor de la propiedad

$obj->setProperty("¡Soy el nuevo valor de la propiedad!"); // Establece un valor nuevo

echo $obj->getProperty(); // Imprime nuevamente para ver el cambio
?>

Recarga el navegador, y verás lo siguiente:

¡Soy la propiedad de una clase!
¡Soy el nuevo valor de la propiedad!

El poder de la programación orientada a objetos se hace evidente cuando se utilizan varias instancias de la misma clase.

<?php
class MyClass
{
    public
$prop1 = "¡Soy la propiedad de una clase!";

    public function
setProperty($newval)
    {
       
$this->prop1 = $newval;
    }

    public function
getProperty()
    {
        return
$this->prop1 . "<br />";
    }
}

// Create two objects
$obj = new MyClass;
$obj2 = new MyClass;

// Get the value of $prop1 from both objects
echo $obj->getProperty();
echo
$obj2->getProperty();

// Set new values for both objects
$obj->setProperty("¡Soy el nuevo valor de la propiedad!");
$obj2->setProperty("¡Yo pertenezco a la segunda instancia!");

// Output both objects' $prop1 value
echo $obj->getProperty();
echo
$obj2->getProperty();
?>

Cuando recargues el navegador, aparecerá lo que sigue:

¡Soy la propiedad de una clase!
¡Soy la propiedad de una clase!
¡Soy el nuevo valor de la propiedad!
¡Yo pertenezco a la segunda instancia!

Como puedes ver, OOP mantiene los objetos como entidades separadas, lo que facilita la separación de diferentes piezas de código en pequeños, pero relacionados, paquetes.

De esta manera ya tenemos claro lo que es la programación orientada a objetos, el concepto de Clases y Objetos, la distinción entre ellos, y las definiciones de propiedades y métodos. Todo breve y claramente explicado. Aún faltan más aspectos que comentar sobre PHP OOP, pero quedarán pendientes para un post posterior.

Este artículo continúa en las siguientes dos partes:

Fuente: Este artículo es un extracto del libro Pro PHP and jQuery, en inglés: Object-Oriented PHP for Beginners.

Comentarios

Imagen de Gerald

Muy buen tutorial, justo las últimas semanas venía trabajando en un proyecto con php orientado a objetos.

Saludos

Imagen de Klo074
Klo074

Muy bueno el tutorial, los felicito, me sirvió de mucho

gracias.

Imagen de pikilon

Muchas gracias, es una buena traducción y hacía falta

Imagen de fhilip2012
fhilip2012

Sencillo, breve, muy bueno muchas gracias y felicidades

Imagen de Mordiskos
Mordiskos

Excelente, sin duda, un gran aporte. Gracias.

Pd: alguien sabe que tipo de letra es el que aparece en la imagen del título???

Imagen de Eduran
Eduran

Excelente, primera vez que le entiendo a un ejercicio de POO, gracias !!!

Imagen de Annonimous
Annonimous

Muchas Gracias!! Llevo ya un tiempo programando, pero sólo estructurado, por que la verdad no había podido entender los conceptos de POO, pero con estos 3 post me has ayudado un montón!

Mil gracias!! :)

Tutoriales

Cómo descargar videos de VK.com
En este artículo voy a explicar como descargar videos y películas...
Descargar Facebook Móvil Gratis
Por si aún no lo han hecho, es posible descargar Facebook Móvil...
Cómo generar tráfico web con las redes sociales - Paso a Paso
Muchas empresas están publicando contenidos como la forma de crear...

Artículo Recomendado

3 Tips cruciales para recuperar archivos eliminados
¿Te imaginas perder el trabajo de toda una semana en tan solo unos segundos? Todos hemos pasado por este problema. Quizás eliminamos por error un archivo importante o lo borramos sin pensar que era valioso para otro... más