Autor Tema: POO en PHP5  (Leído 7028 veces)

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
POO en PHP5
« en: 06 de Noviembre de 2007, 19:50:41 pm »
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/variables
Lo 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.
?>

Código: [Seleccionar]
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 call
Todos 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!
« Última modificación: 19 de Septiembre de 2009, 11:36:43 am por TLX »
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Comunidad PHPeros

POO en PHP5
« en: 06 de Noviembre de 2007, 19:50:41 pm »

Desconectado Revancha

  • PHPero Avanzado
  • ****
  • Mensajes: 375
  • Karma: 22
  • Sexo: Masculino
    • Ver Perfil
Re: POO en PHP5
« Respuesta #1 en: 06 de Noviembre de 2007, 20:07:44 pm »
Buen tutorial.

+ !

Desconectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 166
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re: POO en PHP5
« Respuesta #2 en: 06 de Noviembre de 2007, 21:49:14 pm »
Estupendo TLX, esperaba hace tiempo que algun usuario se animara a empezar el tema de la POO :P
Te doy 5Karmas+ ;)

A ver que tal van los progresos de la gente, yo personalmente espero postear algun tutorial usando POO para ir avanzando mas en el tema ;)
Por favor, leete las Normas


Desconectado G2K

  • Moderador de Programación General
  • PHPero Master
  • ****
  • Mensajes: 2.245
  • Karma: 76
  • Sexo: Masculino
  • Dame un punto de apoyo y moveré la Tierra
    • Ver Perfil
    • Cristian Torrijos
Re: POO en PHP5
« Respuesta #3 en: 06 de Noviembre de 2007, 22:12:53 pm »
Karma +
Campeón del CatSkills de Webs (Enero 2011)
Campeón del SpainSkills de Webs (Abril 2011)
http://www.youtube.com/watch?v=1fBMG8F_hpM
Mejor representante catalan en SpainSkills 2011


Desconectado Josem

  • PHPerit@
  • *
  • Mensajes: 3
  • Karma: 0
    • Ver Perfil
Re: POO en PHP5
« Respuesta #4 en: 18 de Septiembre de 2008, 22:13:02 pm »
Muy bueno,  facil de entender aun para nosotros los principiantes.....

Desconectado Kikers

  • PHPer@ Fijo
  • ***
  • Mensajes: 151
  • Karma: 2
  • Sexo: Masculino
  • <?="NO a la sección MC";?>
    • Ver Perfil
    • PHPMasters, Portal PHP
Re:POO en PHP5
« Respuesta #5 en: 05 de Marzo de 2010, 04:13:19 am »
exelente tutorial... k+

Me confunde mucho la explicación primera, pero trataré de aprender.
<?="NO a la sección MC";?>

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:POO en PHP5
« Respuesta #6 en: 05 de Marzo de 2010, 21:26:31 pm »
Gracias por el post, me ha ayudado a aprender más :P
Saludos.
- Moderador de PHP


Desconectado Saphari

  • PHPer@
  • **
  • Mensajes: 98
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:POO en PHP5
« Respuesta #7 en: 13 de Marzo de 2010, 05:44:26 am »
Buen post Amigo Gracias
<?Php
 $Dev = "  Developer  The  ";
 $game = "  Aion and World Of Warcraft  ";
 $name = "  Saphari and Firewall";
echo "Yo Soy", $Dev, $game, $name;
?>

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:POO en PHP5
« Respuesta #8 en: 28 de Marzo de 2010, 16:23:17 pm »
Muy interesante esto!
En estos momentos en la universidad estoy estudiando Programación Orientada a Objetos de una manera teórica con algoritmos y eso... Para el segundo semestre comenzaremos con la parte práctica (en Java)... Así que yo trataré de aplicar todo lo que aprenda allá, a PHP.

Desconectado Farresito

  • PHPero Avanzado
  • ****
  • Mensajes: 385
  • Karma: 5
  • Sexo: Masculino
  • PimPamTomaC++
    • Ver Perfil
    • Farresito
Re:POO en PHP5
« Respuesta #9 en: 31 de Marzo de 2010, 12:31:20 pm »
Sin palabras...   :star:

Es estupendo, le has echado huevos ;)

A más, cabe destacar que no hay casi faltas de ortografía :).

Saludos!

PD: Quizás me animo a hacer un tutorial para la creación de archivos PDF con PHP ;)
“Lo mejor de los booleanos es que si te equivocas estás a un sólo bit de la solución correcta.”

-- Anónimo

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

-- Isaac Asimov

Desconectado Animus

  • PHPero Avanzado
  • ****
  • Mensajes: 273
  • Karma: 1
  • Sexo: Masculino
  • Aprende a aprender, el resto vendrá solo.
    • Ver Perfil
Re:POO en PHP5
« Respuesta #10 en: 26 de Noviembre de 2012, 11:48:05 am »
"funciones" en una clase no existen, son métodos.


La red social de tus sueños.


Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:POO en PHP5
« Respuesta #11 en: 26 de Noviembre de 2012, 12:32:39 pm »
Sé que en algunas partes he puesto "funciones" para que quede claro que son lo mismo que las funciones de la programación estructurada de toda la vida, pero creo que queda bastante claro que en POO se llaman "métodos" cuando escribo esta linea:

Citar
Una clase es un conjunto de funciones (denominados métodos) que marcan las distintas opciones de modificación de un objeto.

Por si no ha quedado claro, Animus tiene razón, en POO las "funciones" de cada clase se llaman métodos.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Animus

  • PHPero Avanzado
  • ****
  • Mensajes: 273
  • Karma: 1
  • Sexo: Masculino
  • Aprende a aprender, el resto vendrá solo.
    • Ver Perfil
Re:POO en PHP5
« Respuesta #12 en: 28 de Noviembre de 2012, 11:49:57 am »
El método mágico __call, se ejecuta al ejecutar un método desde un objeto, y devuelve el nombre del metodo y sus argumentos ? me lo supongo, estoy estudiando ahora y no puedo acceder a php.net


La red social de tus sueños.


Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:POO en PHP5
« Respuesta #13 en: 28 de Noviembre de 2012, 13:09:16 pm »
El método mágico __call, se ejecuta al ejecutar un método desde un objeto, y devuelve el nombre del metodo y sus argumentos ? me lo supongo, estoy estudiando ahora y no puedo acceder a php.net

No devuelve nada.
Recibe como parámetros el método llamado y los argumentos que se pasaron al método.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es