Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/10/2007, 17:24
yoguuu
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: SPL: ArrayAccess interface ¿ Donde se ha metido ?

Hola amigos, no puse el código por ke pensé que sería algo más de configuración de directivas, de extensiones, de versiones o simplemente de tener o no habilitado...

No obstante como dice 'Seppo' que a él tampoco le sale reflejada la interfaz en el phpinfo(); imagino entonces si debe ser un problema en código.

Bueno pongo entonces el codigo. Uso una estructura de directorios como esto que sigue y voy a concretar poniendo solamente los archivos en relación a este problema con arrayaccess:

Cita:
/libs
config.class.php
/models
/views
/controllers
index.php
/libs/config.class.php

Bueno una simple clase de configuración que usa singleton y ahora mismo la función básica es solo definir y devolver valores en el array $config;, pero me gustaría poder hacerlo usando ArrayAccess.
Código PHP:
<?php
class config implements ArrayAccess {
    
    
// Attribute Members
    
private static $instance;
    private 
$config = array();
    
    
// Calls to a constructor disabled
    
private function __construct() {}
    
    
// Singleton Method
    
public static function getInstance() {
        if (!isset(
self::$instance)) {
            
$c __CLASS__;
            
self::$instance = new $c;
        }
        return 
self::$instance;
    }
    
    
// Prevenir a los usuarios de poder clonar la instancia
    
public function __clone() {
        
trigger_error('No está permitido clonar.'E_USER_ERROR);
    }
    
    
// Custom set, unset & get for ArrayAccess Interface
    
public function set($key$var) {
        if (isset(
$this->config[$key]) == true) {
            throw new 
Exception('Imposible definir la variable' $key '. Ya definida.');
        }
        return 
$this->config[$key] = $var;
    }
    function 
get($key) {
        if (isset(
$this->config[$key]) == false) {
            return 
null;
        }
        return 
$this->config[$key];
    }
    function 
remove($key) {
        if (isset(
$this->config[$key])) {
            unset(
$this->config[$key]);
        }        
    }
    
    
// ArrayAccess Interface Method's
    
public function offsetExists($offset) {
        return isset(
$this->config[$offset]);
    }
    public function 
offsetGet($offset) {
        return 
$this->get($offset);
    }
    public function 
offsetSet($offset$value) {
        
$this->set($offset$value);
    }
    public function 
offsetUnset($offset) {
        unset(
$this->config[$offset]);
    }
    
    
// Tal como me sugería 'Seppo' Comprobaremos la interfaz
    
function iExist() {
        
$a interface_exists('ArrayAccess');
        echo 
$a;
    }
}
?>
index.php

Bueno este será el punto de arranque de este proyecto, que actualmente tiene el diseño sin construir, solo es un boceto si hablamos de aplicación o web. Desde ahí creo constantes de rutas, meto un autoload e instancio la clase config y la uso. Pero usando el array access :S no defino ni obtengo nada... no obstante la funcion que comprueba la interfaz devuelve 1 (true).
En este, solo comentaré, no quitaré el codigo ke no es relevante para esta duda.
Código PHP:
<?php
define
("APP_ROOT"'./');
define("DS"'/');
define("LIBS_PATH"APP_ROOT.'libs'.DS);
//define("MODELS_PATH", APP_ROOT.'models'.DS);
//define("CONTROLLERS_PATH", APP_ROOT.'controllers'.DS);
//define("VIEWS_PATH", APP_ROOT.'views'.DS);
//define("CONFIG_PATH", APP_ROOT.'config'.DS);

function __autoload($class) {
    require_once 
LIBS_PATH $class ".class.php";
}
//require_once CONFIG_PATH.'config.php';
//require_once CONTROLLERS_PATH.'front.controller'.php

/*
* BUENO PUES AKI TENEIS UN EJEMPLO DE COMO INSTANCIO LA CLASE
* Y DE COMO INTENTO USAR EL ARRAYACCESS SIN MUCHO EXITO xD
* A VER SI PUEDEN AYUDARME ! :)
*
**/
$config config::getInstance();
$config->iExist(); // Existe la interfaz ? 1 == TRUE; 0 == FALSE; Devuelve 1 ! 
$config->['DB_Driver'] = 'mysql'// Seteamos la variable
echo $config['DB_Driver']; // recogemos la variable

?>
Bueno lo dicho ! a ver si podeis ayudarme :S Por ke no logro entender por que no está funcionando

Gracias :D