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

POO: Duda clases estáticas

Estas en el tema de POO: Duda clases estáticas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original class CodigoPais {         //Clase que mete en un array todos los códigos de país de ...
  #1 (permalink)  
Antiguo 05/02/2013, 10:25
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 11 años, 11 meses
Puntos: 58
POO: Duda clases estáticas

Código PHP:
Ver original
  1. class CodigoPais {
  2.         //Clase que mete en un array todos los códigos de país de que disponemos para poder hacer búsquedas sin consultar la bd
  3.         private static $codigos = array();
  4.  
  5.         private static function CodigoPais() {             
  6.             $resultado = odbc::consulta("SELECT clapai, codpas, nompas FROM codpais");         
  7.             $contador = 0;
  8.             while ($fila = odbc_fetch_array($resultado)) {
  9.                 self::$codigos[$contador]['clapai'] = $fila['clapai'];
  10.                 self::$codigos[$contador]['codpas'] = $fila['codpas'];
  11.                 self::$codigos[$contador]['nompas'] = $fila['nompas'];
  12.                 $contador++;
  13.             }
  14.         }
  15.         public static function dimePais($codigo_pais) {
  16.             $elementos = COUNT(self::$codigos);
  17.             echo $elementos;exit;
  18.             for ($i=0; $i <= $elementos; $i++) {
  19.                 if (preg_match("/^[$codigo_pais].+/", self::$codigos[$i]['codpas'])) {                 
  20.                     echo "$codigo_pais es igual a ".self::$codigos[$i]['codpas'];
  21.                     return self::$codigos[$i];
  22.                     break;
  23.                 }              
  24.             }
  25.             return false;
  26.         }
  27.     }

Tengo una clase que recurrentemente va a necesitar consultar cierto campo en la BD. Para evitar 8000 consultas tenía pensado hacer una clase que cargue antes esos campos, no son muchos, como unos 20. Bueno eso no es lo importante.

La cuestion es que quería enviar el campo a buscar desde otra clase y forzosamente me vi obligado a crear los métodos como estáticos, y evidentemente no quiero que se ejecute por cada vez que lo requiero el constructor.

La cuestión es que no se como hacer para que el constructor se ejecute, porque como es estático no deja usar el constructor ya que no se instanciará. ¿Alguna idea?

Solo quiero que se ejecute el constructor al menos 1 vez para luego poder utilizar el otro método (está sin acabar todavía).

Y otra pregunta, en caso de tener un return finaliza ese método o tengo que finalizarlo con el break para terminar el bucle?

Un saludo
  #2 (permalink)  
Antiguo 05/02/2013, 11:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: POO: Duda clases estáticas

Puedes usar un registro, así guardas la instancia de tu clase, o usar Singleton, o mejor un DI Container y especificarle que ese objeto es shared para que te devuelva la misma instancia...
  #3 (permalink)  
Antiguo 05/02/2013, 11:09
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 11 años, 11 meses
Puntos: 58
Respuesta: POO: Duda clases estáticas

La verdad no te entendí nada, excepto lo del patrón Singleton que no se me había ocurrido.

Creo que tiraré por ahí, gracias. Lo de usar un registro no se a qué te refieres, y lo de DI Container menos aún! Toca tirar de google.

Un saludo
  #4 (permalink)  
Antiguo 05/02/2013, 11:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: POO: Duda clases estáticas

Puedes usar pimple es un contenedor que facilita el uso de DI.

Saludos.
  #5 (permalink)  
Antiguo 05/02/2013, 11:23
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 11 años, 11 meses
Puntos: 58
Respuesta: POO: Duda clases estáticas

Muchas gracias, voy a probarlo.
  #6 (permalink)  
Antiguo 05/02/2013, 11:23
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: POO: Duda clases estáticas

No veo muy bien el problema, acaso no puedes comprobar si el array se ha cargado y en caso negativo cargarlo(lazy loading) ?, de todas formas deberías tratar de no saltarte dependencias como lo estas haciendo.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 05/02/2013, 16:38
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: POO: Duda clases estáticas

Ya que viene al tema, algún libro en español que hable de estos conceptos?

Gracias!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #8 (permalink)  
Antiguo 06/02/2013, 02:27
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 11 años, 11 meses
Puntos: 58
Respuesta: POO: Duda clases estáticas

Cita:
Iniciado por masterpuppet Ver Mensaje
No veo muy bien el problema, acaso no puedes comprobar si el array se ha cargado y en caso negativo cargarlo(lazy loading) ?, de todas formas deberías tratar de no saltarte dependencias como lo estas haciendo.

Saludos.
¿A que te refieres con lo de las dependencias? Estoy muy verde aun con POO por sino se nota.
  #9 (permalink)  
Antiguo 06/02/2013, 10:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: POO: Duda clases estáticas

Las dependencias es eso, lo que puede necesitar tu clase para que funcione bien.
  #10 (permalink)  
Antiguo 10/02/2013, 17:10
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 16 años, 11 meses
Puntos: 270
Respuesta: POO: Duda clases estáticas

Si son exclusivamente los datos los que quieres mantener entre instancias, no tienes por qué convertir todos los métodos de la clase en estáticos..Con hacer la variable estática, es bastante.

Código PHP:
Ver original
  1. class CodigoPais {
  2.         private static $codigos = null;
  3.         private static $contador=0;
  4.         function CodigoPais() {              
  5.              $this->cargaCodigos();
  6.         }
  7.         private function cargaCodigos()
  8.         {
  9.                if(CodigoPais::$codigos!==null)
  10.                     return;
  11.               /*
  12.                 ...query, y almacenado de datos en CodigoPais::$codigos
  13.               */
  14.          }
  15.         }

Ahora bien, si vas tambien a modificar o hacer operaciones con esos datos, y quieres tener control sobre ello, deberias convertir la clase en un Singleton.

Etiquetas: clases, php, poo, select
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 19:17.