Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/02/2013, 10:25
alyciashape
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
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