コード例 #1
0
 /**
  * Nombre de la tabla que almacena una instancia de un objeto persistente.
  * Si tiene "withTable", elige ese, si no, toma el nombre de la clase normalizado como nombre de la tabla.
  * @param PersistentObject $ins Instancia de la cual derivar el nombre de la tabla en la base de datos.
  */
 public static function tableName($instance_or_class)
 {
     $ins = $instance_or_class;
     // TEST
     if (empty($instance_or_class)) {
         debug_print_backtrace();
     }
     //echo '<pre> tableName '. print_r($instance_or_class, true) .__FILE__.__LINE__.'</pre>';
     if (!is_object($ins)) {
         $ins = new $instance_or_class(array(), true);
     }
     // Si no es instancia, es clase, creo una instancia de esa clase.
     if (!$ins instanceof PersistentObject) {
         throw new Exception("La instancia debe ser de PO y es " . gettype($ins));
     }
     // FIXME: en pila de lados tengo que crear una instancia para poder llamar a este metodo,
     // porque no mejor hacer que pueda recibir tambien el nombre de la clase, y en ese caso,
     // resuelve la tabla como nombre de clase, sin considerar withTable, o directamente crea
     // la instancia internamente. Permitiendo tambien pasarle una instancia, o sea, ambas opciones.
     // FIXME: SI NO TIENE WIHT TABLE TENGO QUE VER POR EL NOMBRE DE LA CLASE, PERO ME VIENE PersistentObject,
     // TENGO CAPAZ QUE SETEARLE EL WITH TABLE A MANO SI NO LO TIENE SETEADO!! NOOOOO!!!
     // Si no tiene withTable, tengo que crear el nombre de la tabla a partir del nombre de la clase.
     // Si no tiene withTable, quiere decir que en ninguna superclase de ella se define, entonces tengo que
     // obtener la superclase de nivel 1 y el nombre de la tabla se saca de el nombre de esa clase.
     if ($ins->getWithTable() != NULL && strcmp($ins->getWithTable(), "") != 0) {
         $tableName = $ins->getWithTable();
     } else {
         $superclaseNivel1 = $ins->getClass();
         while (($parent = get_parent_class($superclaseNivel1)) !== 'PersistentObject') {
             $superclaseNivel1 = $parent;
         }
         $tableName = $superclaseNivel1;
     }
     // Filtro...
     $tableName = DatabaseNormalization::table($tableName);
     // TODO: La funcion de normalizacion esta deberia estar en un core.basic.String.
     return $tableName;
 }