Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Parametro en blanco? vacio? mm problema de filtrado.

Estas en el tema de Parametro en blanco? vacio? mm problema de filtrado. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Después de mucho meditarlo no pude encontrar solución :P les dejo un problemita q tengo para ver si alguno se le ocurre algo tengo una ...
  #1 (permalink)  
Antiguo 18/02/2010, 13:06
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Pregunta Parametro en blanco? vacio? mm problema de filtrado.

Después de mucho meditarlo no pude encontrar solución :P les dejo un problemita q tengo para ver si alguno se le ocurre algo

tengo una classe para administrar mi database SQL
con un método constructor para tomar los datos y hacer la conexión, hasta aquí todo bien, todo normal, el tema es que tengo un archivo de configuración. en donde defino unas constantes que serian por decirlo así la conexión por defecto a SQL

planteo aquí el ejemplo

Código PHP:
Ver original
  1. define('DBHOST','localhost');
  2. define('DBUSER','user');
  3. define('DBPASS','pass');
  4. define('DBDDBB','nombre_db');


entonces el metodo constructor quedaria asi

Código PHP:
Ver original
  1. public function __construct($db_host = "", $db_user = "", $db_pass = "", $db_ddbb = ""){
  2.         $this->host = (!empty($db_host)) ? $db_host : DBHOST;
  3.         $this->user = (!empty($db_user)) ? $db_user : DBUSER;
  4.         $this->pass = (!empty($db_pass)) ? $db_pass : DBPASS;
  5.         $this->ddbb = (!empty($db_ddbb)) ? $db_ddbb : DBDDBB;
  6.         $this->conectar();
  7.     }


hasta aquí todo bien también

pruebas de ejemplo

Código PHP:
Ver original
  1. $db = new Database(); // conexión sin problemas
  2. $db = new Database("","","","OtraBaseDeDatos");  // conexión sin problemas
  3. $db = new Database("","OtroUser","OtraPass"); // conexión sin problemas
  4. /* pero aqui o.O?
  5.     quiero cambiar el user a root, y sin password.
  6. */
  7. $db = new Database("","root","");

Obviamente estoy enviando la variable vacía, así que el empty del método constructor lo filtra y me deja como contraseña de la db la asignada por la constante de mi archivo de configuración.

alguna idea de como mantener este algoritmo y dejarlo 100% funcional?

PD: soy pésimo explicando problemas, intente dejarlo lo mas claro posible.. cualquier duda comentan...

saludos
__________________
More about me...
~ @rhyudek1
~ Github
  #2 (permalink)  
Antiguo 18/02/2010, 13:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Parametro en blanco? vacio? mm problema de filtrado.

usa is_null(), pues si usas comillas vacías no son iguales a NULL

y en caso de querer usar un valor por defecto usas las comillas vacías... (:


adicionalmente dejo este enlace, es una tabla comparativa de tipos:
http://www.blueshoes.org/en/developer/php_cheat_sheet/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/02/2010, 13:16
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Parametro en blanco? vacio? mm problema de filtrado.

es mas o menos lo que necesito pero mi idea era evitar tener que entregar una instrucción al que use la classe... por que no muchos la leerían y se darían cuenta de eso

y para que lo que tu dices funcione
tendria q hacerlo asi

Código PHP:
Ver original
  1. $db = new Database(NULL,NULL,NULL,"otraDatabase");

lo cual rara ves e visto q alguien lo haga :P..

hay alguna otra forma?
__________________
More about me...
~ @rhyudek1
~ Github

Última edición por Hidek1; 18/02/2010 a las 13:37
  #4 (permalink)  
Antiguo 18/02/2010, 13:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Parametro en blanco? vacio? mm problema de filtrado.

entonces el problema radica en el diseño de tu clase... osea, si no quieres que se haga eso tan simple como crear métodos setters para la configuración...

Código PHP:
function setHost($host)
{
  
// ...
}

// ..

$foo = new Bar;
$foo->setHost('localhost'); 
por cierto... esto debería ir en el foro de OOP
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/02/2010, 13:24
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Parametro en blanco? vacio? mm problema de filtrado.

ajaja si al parecer no me queda otra que usar setters :P
eso me pasa por cerrarme tanto en intentar dejarlo todo desde el __construct :3

gracias por la ayuda @pateketrueke
te dejo karma, ya que aquí tienen la mala costumbre de ni agradecer la ayuda que uno brinda !!

saludos :P!

__________________
More about me...
~ @rhyudek1
~ Github
  #6 (permalink)  
Antiguo 18/02/2010, 13:53
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Parametro en blanco? vacio? mm problema de filtrado.

Hola,

Posiblemente ...

Para mantener las características básicas de la programación orientada a objetos, la clase 'Conexión' no debería inicializar por defecto ningún valor. Por abstracción, la clase no debería conocer los detalles externos de la implementación.

De otra forma se vuelve confuso para los programadores que usan o extienden dichas clases, y resultas usando 'siempre' la versión 'con parámetros'. Si no se le pasan los parámetros necesarios debe tirar una excepción.

Así tenemos como ejemplo los frameworks, creo que ningún framework va a inicializar por defecto ningún valor de la conexión (sino posiblemente resultaría conectandome a Zend sin saberlo ). Eso permite que la clase sea lo suficientemente abstracta para que cada uno la inicializemos a nuestro gusto.

Ahora bien ... si quieres crear esa clase para ahorrarte el trabajo de estar escribiendo el nombre de usuario, la contraseña, entonces lo mas aconsejable sería usar una clase nueva que extienda la anterior, que implemente el patrón singleton y que tenga un método Factory para obtener una conexión específica de tu base de datos obtenerConexionLocal(), y en ese caso no acepta parámetros.

Por ejemplo, la programación a objetos debe simular el comportamiento normal de las cosas, si yo digo Casa() me estoy refiriendo a un prototipo de casa pero ninguna en especial. Si digo new Casa("25"), estoy refiriendome a la casa 25.

Si digo Conexion no me estoy refiriendo a ningúna en específico. new Conexion(25) entonces ya sé que es la conexión número 25. Pero no espero que new Conexion() me devuelva la conexión 8 ... ¿Cómo lo voy a saber exactamente, si eso lo oculta la implementación de Conexion?.

Pero esa es solamente mi opinión ,
Saludos,
  #7 (permalink)  
Antiguo 18/02/2010, 14:00
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Parametro en blanco? vacio? mm problema de filtrado.

@HackmanC gracias por tu comentario.. en realidad no llevo mucho con esto de POO y todo lo que se de php es por manuales y ese tipo de cosas..
me a costado mucho salir de la programación estructurada por un tema de costumbre y no tengo aun las bases que enseñan bien el tema este :P

como lo había planteado esto va con un archivo de configuración por eso había pensado en esa opción en caso de que en 1 u otra pagina se necesitara cambiar solo de base de datos u otro parecido :P.. pero ya que lo comentas creo que revisare para ver si mejoro un poco la vision que tengo sobre la classe..

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #8 (permalink)  
Antiguo 18/02/2010, 14:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Tema movido desde PHP a PHP orientado a objetos

Etiquetas: classe, empty, function, method, php, filtros
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 13:23.