Foros del Web » Programando para Internet » PHP »

extensiones de clases

Estas en el tema de extensiones de clases en el foro de PHP en Foros del Web. Hola que tal, no se si este es el lugar indicado para este posteo... Queria sus opiniones acerca de algo que no entiendo bien... Estoy ...
  #1 (permalink)  
Antiguo 28/03/2009, 16:00
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 4 meses
Puntos: 0
extensiones de clases

Hola que tal, no se si este es el lugar indicado para este posteo... Queria sus opiniones acerca de algo que no entiendo bien...

Estoy haciendo un sitio no muy grande... Con PHP y MySQL...

El tema es el siguiente:

Tengo una clase 'MySQL' la cual se encarga de todo lo que sea trabajar con mysql... conexion, consultas, simples desde el script asi como desde archivos externos .sql, etc. Y quiero hacer una clase para registrarse en la pagina... o sea todo lo que tenga ver con subscribirse... asi como al newsletter, o abrir una nueva cuenta insertando datos en la base de datos...

Y obviamente en esa misma clase, voy a tener que llamar a la clase 'MySQL'... (para insertar los datos...)

Lo que quisiera saber es si en este caso, ya que voy a usar metodos de la clase mysql, seria conveniente hacer le una extension 'Register' a la clase 'MySQL'... o hacer una clase totalmente aparte...

(la cosa es que tambien me quiero sacar la duda de cuando se utiliza el extender una clase... )

y si alguien me podria explicarme los tipos de clases, he visto en algunos escript el 'abstract class' etc. o al menos darme algun lugar donde pueda leer al respecto y que sea entendible...

pero lo que mas gustaria saber es...

realmente que me conviene? extender la mysql o algo por estilo para cuando haga una clase que utilize metodos de esa clase? asi como el registrarse, darse de baja, y lo que tenga que ver con mysql???

espero que me ayuden y orienten un poco xD

saludos...
  #2 (permalink)  
Antiguo 28/03/2009, 16:20
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: extensiones de clases

Cita:
Lo que quisiera saber es si en este caso, ya que voy a usar metodos de la clase mysql, seria conveniente hacer le una extension 'Register' a la clase 'MySQL'... o hacer una clase totalmente aparte...
Cuando quieras saber si tienes que extender una clase siempre usa IS-A (ES-UN) y HAS-A (TIENE-UN)
Cuando hay una relacion IS-A, entonces extiendes. Pero si hay una relacion HAS-A, instancias la clase.
Ejemplo:
Registro ES-UNA Conexion MySQL no tiene sentido en lo absoluto, ya que la clase Registro NO es una conexion hacia mysql.
Pero sin embargo:
Registro TIENE-UNA Conexion MySQL si tiene sentido, es decir que tendras que instanciar el objeto MySQL en la clase Registro en vez de extenderla.

Otro ejemplo:
Perro ES-UN Animal tiene sentido, mientras que
Perro TIENE-UN Animal no lo tiene. Esto quiere decir que la clase Perro extiende a Animal.

(No siempre se usa este criterio, pero es de mucha utilidad)

Cita:
y si alguien me podria explicarme los tipos de clases, he visto en algunos escript el 'abstract class' etc. o al menos darme algun lugar donde pueda leer al respecto y que sea entendible...
Una clase abstracta es una clase que no se puede instanciar.

Imaginate el ejemplo de la clase Animal.
Esa clase contiene las subclases: Perro, Gato, Leon, etc..

Si quisieramos hacer una instancia de Perro, no hay problema:
$dog = new Perro(); //esto es un perro

Pero, como se veria un animal:
$animal = new Animal(); //esto es una cosa rara
Talvez algo asi:
http://www.gamerevolution.com/images...rd_animals.jpg

En ese caso, el unico proposito de la clase Animal es ser extendida para que las subclases hereden los metodos de esta. Por lo tanto, la clase Animal es ABSTRACTA.

Esa explicación la he sacado del libro Head First Java 2nd Edition (Muy recomendado para aquellos que quieran entender OOP). Es mas o menos lo que recuerdo, espero que sea entendible.
  #3 (permalink)  
Antiguo 28/03/2009, 17:23
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: extensiones de clases

jejeje muy buena explicacion... con animales xD jeje pero se entiende gracias... pero se ingles :P pero igual gracias por la completa explicacion..

si bien entiendo... si registro has_a mysql, instancio la clase mysql dentro de la de registro?

mi pregunta fue mas que nada para entender lo que creo que ahora entiendo...jeje
yo nada mas quiero asegurarme de armar las clases lo mejor posibles...

bueno, gracias y saludos...
  #4 (permalink)  
Antiguo 28/03/2009, 17:55
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: extensiones de clases

ahh! una cosita mas.... recien estaba leyendo sobre los Patrones... el Singleton creo que mas o menos lo entiendo... pero el Factory?????

que lleva el & adelante... y tambien me acuerdo ver el &antes de una variable en un parametro de una funcion? puede ser?? alguien sabria explicarme bien en español :P? hehe se ingles pero hay veces que necesito que me las expliquen en catellano xD

gracias! y saludos...
  #5 (permalink)  
Antiguo 28/03/2009, 19:48
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: extensiones de clases

No estoy familiarizado con ese patrón, pero talvez un ejemplo de Wikipedia te ayude:
http://en.wikipedia.org/wiki/Factory_method_pattern#Php

El & sirve para pasar una variable por referencia.

Si por ejemplo hacemos:

Código PHP:
$a 1;
$b 2;
$c $a;

//Imprimo $c
echo $c//imprime 1
$a $a $b;
echo 
"<br />";
echo 
$c//aun imprime 1, porque hicimos una "copia" de la variable $a

//Mientras que pasando la variable por referencia:

$a 1;
$b 2;
$c = &$a//paso la variable $a por referencia
echo "<br />";
//imprimo $c
echo $c//imprime 1
//hago un calculo al azar:
$a $a $b;
echo 
"<br />";
//$a ahora vale 3
echo $c //imprime 3, en vez de 1, porque pasamos la variable por referencia 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:31.