Programación orientada a objetos en PHP

  • Por
PHP ofrece funcionalidades propias de la POO. En este capítulo veremos los aspectos más básicos de esta metodología.
La programación orientada a objetos es una metodología de programación avanzada y bastante extendida, en la que los sistemas se modelan creando clases, que son un conjunto de datos y funcionalidades. Las clases son definiciones, a partir de las que se crean objetos. Los objetos son ejemplares de una clase determinada y como tal, disponen de los datos y funcionalidades definidos en la clase.

La programación orientada a objetos permite concebir los programas de una manera bastante intuitiva y cercana a la realidad. La tendencia es que un mayor número de lenguajes de programación adopten la programación orientada a objetos como paradigma para modelizar los sistemas. Prueba de ello es la nueva versión de PHP (5), que implanta la programación de objetos como metodología de desarrollo. También Microsoft ha dado un vuelco hacia la programación orientada a objetos, ya que .NET dispone de varios lenguajes para programar y todos orientados a objetos.

Así pues, la programación orientada a objetos es un tema de gran interés, pues es muy utilizada y cada vez resulta más esencial para poder desarrollar en casi cualquier lenguaje moderno. En este artículo vamos ver algunas nociones sobre la programación orientada a objetos en PHP. Aunque es un tema bastante amplio, novedoso para muchos y en un principio, difícil de asimilar, vamos a tratar de explicar la sintaxis básica de PHP para utilizar objetos, sin meternos en mucha teoría de programación orientada a objetos en general.

Referencia: Se puede acceder a una descripción de la programación orientada a objetos, publicada en DesarrolloWeb.com. http://www.desarrolloweb.com/articulos/499.php

Las clases: class

Una clase es un conjunto de variables, llamados atributos, y funciones, llamadas métodos, que trabajan sobre esas variables. Las clases son, al fin y al cabo, una definición: una especificación de propiedades y funcionalidades de elementos que van a participar en nuestros programas.

Por ejemplo, la clase "Caja" tendría como atributos características como las dimensiones, color, contenido y cosas semejantes. Las funciones o métodos que podríamos incorporar a la clase "caja" son las funcionalidades que deseamos que realice la caja, como introduce(), muestra_contenido(), comprueba_si_cabe(), vaciate()...

Las clases en PHP se definen de la siguiente manera:


<?
class Caja{
    var $alto;
    var $ancho;
    var $largo;
    var $contenido;
    var $color;

function introduce($cosa){
    $this->contenido = $cosa;
}

function muestra_contenido(){
    echo $this->contenido;
}
}
?>

En este ejemplo se ha creado la clase Caja, indicando como atributos el ancho, alto y largo de la caja, así como el color y el contenido. Se han creado, para empezar, un par de métodos, uno para introducir un elemento en la caja y otro para mostrar el contenido.

Si nos fijamos, los atributos se definen declarando unas variables al principio de la clase. Los métodos se definen declarando funciones dentro de la clase. La variable $this, utilizada dentro de los métodos la explicaremos un poco más abajo.

Utilizar la clase

Las clases solamente son definiciones. Si queremos utilizar la clase tenemos que crear un ejemplar de dicha clase, lo que corrientemente se le llama instanciar un objeto de una clase.

$micaja = new Caja;

Con esto hemos creado, o mejor dicho, instanciado, un objeto de la clase Caja llamado $micaja.

$micaja->introduce("algo");
$micaja->muestra_contenido();


Con estas dos sentencias estamos introduciendo "algo" en la caja y luego estamos mostrando ese contendido en el texto de la página. Nos fijamos que los métodos de un objeto se llaman utilizando el código "->".

nombre_del_objeto->nombre_de_metodo()

Para acceder a los atributos de una clase también se accede con el código "->". De esta forma:

nombre_del_objeto->nombre_del_atributo

La variable $this

Dentro de un método, la variable $this hace referencia al objeto sobre el que invocamos el método. En la invocación $micaja->introduce("algo") se está llamando al método introduce sobre el objeto $micaja. Cuando se está ejecutando ese método, se vuelca el valor que recibe por parámetro en el atributo contenido. En ese caso $this->contenido hace referencia al atributo contenido del objeto $micaja, que es sobre el que se invocaba el método.

Autor

Miguel Angel Álvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Victor

24/3/2005
Deberian poner correctamente el ejemplo este:

function muestra_contenido(){
echo $this->contenido;
}


Me imagino que sabran que en teoria por supuesto, una clase nunca imprime un resultado, solo lo debe devolver.

function muestra_contenido(){
return $this->contenido;
}
y luego usandolo:
echo $caja->muestra_contenido();


Saludos.

Spiro

19/9/2005
Es correcto que una clase por lo general no debe imprimir un valor o mensaje pero hay ciertas ocasiones donde algun método de la clase deba imprimir algo. Como ejemplo hago referencia a los widgets de GTK. Cada widget creado se va anexando a otro pero al final tienes un método que lo que hace es pintarnos todo en pantalla.
En JAVA tienes el método paint ( ) que pinta un trazo.
Creo que cada problema en especifico requerira o no de una manera diversa de tratar los métodos de cada clase y entonces definir si la clase permite imprimir algo.

totheMario

18/4/2007
Se puede hacer de cualquier manera, pero es mas correcto no imprimir desde la clase a menos que sea una clase escecífica para hacer esto. En este caso es mejor devolver un valor y no imprimirlo ya que nos dará mucha más flexibilidad a la hora de usar el método.

JULIO

28/4/2009
ME GUSTARIA SABER SU FUNSIONE
COMO PUEDO EXTENDER MIS CONOCIMIENTOS

Jose Luis

24/6/2009
Para que sea igual al ejemplo debe ser:
<?php
class Caja{
var $contenido;
function introduce($cosa){
$this->contenido = $cosa;
}
function muestra_contenido(){
return $this->contenido;
}
}

$micaja = new Caja;
$micaja->introduce("algo");
echo $micaja->muestra_contenido();

?>

WALTER

11/8/2009
MODIFICAR ARCHIVO EXCEL EN UN HTML
Como se hace para abrir un archivo excel dese el naegador y podemo modificar alguna celda y luego guardar en el mismo archivo excel.

ebreyaue

30/8/2009
El uso de las funciones y las clases pueden ser una buena heramienta
Yo los estuve probando y mas a la hora de desarollar un cms o una red social.

ahora estoy intentando hacer un script que muestre los comentarios de una entrada publicada algo asi como los comentarios que aparecen en las entradas de mi facebook.

dago

01/2/2010
Para qué se utiliza la programación orientada a objetos en PHP
He escuchado desde hace tiempo sobre programación orientada a objetos en varios lenguajes y ahora en PHP, pero nunca he sabido como aplicarlo a la realidad, por eso me surge la pregunta. ¿En qué casos se utiliza la programación orientada a objetos en la vida real? es decir, me encuentro programando un sitio con PHP y MySQL ¿ahí aplica utilizar la programación orientada a objetos y cómo?

Espero haberme explicado.. gracias!! xD

Hidden

16/8/2010
Gracias
Muy Bueno el articulo por fin e entendido ALGO de POO. Asique gracias ;)

Fernando Villa

15/10/2010
Agradecido
Gracias tenia un problema con una plantilla joomla que me generaba un título y utilizava el codigo -&gt; y no tenía ni idea, seguire trabajando en mi sitio de <a href="www.altotrafico.co">diseño web</a>, gracias de nuevo

Zar Nicolas II

27/10/2010
Una clase mas sencilla de entender
para los que quizás no comprendan muy bien este concepto, a ver q tal con este ejp:

class goku {
var $speed;
var $stamina;
var $state = 0; //indica si está en modo supersaiyajin o en modo normal :D, x defecto es zero (normal)
var $live_left; //la cantidad de vida que le queda al pobre

//converts into SSJ
function convertInto_SSJ($level) {
$this->state = $level;
$this->speed = $level += ($level * 100); //speed is increased because the transformation into SSJ
}

function doKameHame($X10) {
if ($X10) { //si es un kame hame aunmentado a 10 veces, la reducción de energía es mayor
$this->stamina -= 100; //ufff
}
else {
$this->stamina -= 34;
}
}
}

666

31/1/2011
php
me exito cuando programo....hoo...hooo si.... yeah!! :)

Gerso Quijada

21/3/2011
Muy buena la explicación
Gracias, estoy empezando a migrar todo el conocimiento estructural que tengo sobre php y así actualizarme en esta nueva era de la programación, y me ha servido de mucho su articulo es muy fresco e interesante

erickbuzz

25/6/2011
coment
no es necesario devolver el valor, si bien no es la mejor forma de hacerlo el impirmirlo NO ESTA MAL..

cada quien tiene su forma de pogramar en cuanto a las necesidades del programa.

atem

06/12/2011
ja
pues yo no imprimiria ni asignaria variables ni haria operaciones en la clase preferiria hacerlo en el metodo pero = esta bienn

miguel

05/1/2012
calmence
la característica si un metodo imprime o no eso ya depende de cada uno y de los requerimientos del programa, en si el tema no es ese sino poder ver como es posible programar orientado a objetos en php si quiero que mi método se caje o no eso es asunto mío pendejos

clato

10/1/2012
NO ESTA MAL
PARA SER UN EJEMPLO BASICO ESTA BIEN!!! CON LA EXPERIENCIA, UNO PUEDE TOMAR SU PROPIO CRITERIO DE COMO ES CORRECTO

Gustavo

17/5/2012
Articulo obsoleto
Este artículo es obsoleto. sugiero que no lo lean y busquen información mas renovada sobre POO en PHP.

Deberían borrarlo o reescribirlo de nuevo.

metalfree

25/6/2012
idea
en otras palabras, crear las condiciones necesarias atributos indispensables para que exista la caja y luego introducirle el contenido adentro.
gracias, entendi claramante voy a hacer la practica con un programa.