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