Ok i've posted the latest file version after trying to implement ArrayObject... because of my google search .. found an article saying this would be the solution.
I've posted the way i used it.
I've posted the output.
Anyway can help me out ?
Usage:
$config->dumpArray();
echo $config['dbSettings']['dsn'];
$config['dbSettings']['dsn'] = 'localhost';
echo $config->dbSettings->dsn;
Output:
ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[session] => Array
(
[sessionLifetime] => 60
[gcProbability] => 100
[gcDivisor] => 200
[securityCode] => SD&*$&@#sadux&D@3@#@#@SD
)
[dbSettings] => Array
(
[dsn] => mysql:dbname=Test;host=localhost
[username] => root
[password] => somepasswordhere
[lockTimeOut] => 50
)
)
)
mysql:dbname=Twelve;host=localhost
Notice: Indirect modification of overloaded element of Twelve\Config\Config has no effect in /home/subdomains/prod/index.php on line 34
Notice: Trying to get property of non-object in /home/subdomains/prod/index.php on line 35
Class Code:
<?php
namespace Twelve\Config;
use \ArrayObject;
use \ArrayAccess;
use \Countable;
use \IteratorAggregate;
use \ArrayIterator;
use \Twelve\SingletonPattern\LazySingleton;
use \Twelve\SingletonPattern\Interfaces\ILazySingleton;
/**
* Singleton With Configuration Info
*/
class Config extends ArrayObject implements ArrayAccess, Countable, IteratorAggregate, ILazySingleton
{
/**
* Instance Var
* @var Config
*/
protected static $_instance = null;
/**
* Stores FileName
* @var Config
*/
protected static $_configFile = '';
/**
* Config Settings Array
* @var Config
*/
protected $_settings = array();
public static function getInstance(){
return LazySingleton::getInstance(__CLASS__);
}
/**
* Set the Config File Path
*/
public static function setFile($filePath)
{
static::$_configFile = $filePath;
}
public function __construct()
{
LazySingleton::validate(__CLASS__);
// Allow accessing properties as either array keys or object properties:
//parent::__construct($this->_settings, ArrayObject::ARRAY_AS_PROPS);
$values = include(static::$_configFile);
if(is_array($values))
{
$this->_settings = new ArrayObject(&$values, ArrayObject::ARRAY_AS_PROPS);
}
}
// some debug method
public function dumpArray()
{
echo "<pre>";
print_r($this->_settings);
}
/**
* Prevent Cloning
*/
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
// No Cloning Allowed
}
/**
* Returns the Number of Elements Inside the Config File
* @var Config
* @return Integer Number of Elements Inside Config
*/
public function count()
{
return sizeof($this->_settings);
}
/**
* Check if a Given Key Exists
* @var Config
* @param mixed $offset Key of Item to Check
* @return Boolean True if Key Exists, False Otherwise
*/
public function offsetExists($offset)
{
return key_exists($offset, $this->_settings);
}
/**
* Retrieve the Value of a Given Key
* @param mixed $offset Key of Item to Fetch
* @return mixed Value of the Matched Element
*/
public function offsetGet($offset)
{
return $this->_settings[$offset];
}
/**
* Assign a new Value to a Key
* @param mixed $offset Key of the Element to Set
* @param mixed $value Value to Assign
*/
public function offsetSet($offset, $value)
{
$this->_settings[$offset] = $value;
}
/**
* Remove an Item from the Config
* @param mixed $offset Key of the Element to Remove
*/
public function offsetUnset($offset)
{
unset($this->_settings[$offset]);
}
/**
* Retrieve an Iterator for Config Values
* @return Iterator Iterator of Config Values
*/
public function getIterator()
{
return new ArrayIterator($this->_settings);
}
/**
* Enables to Set Values Using the Object Notation i.e $config->myValue = 'Something';
*/
public function __set($key, $value)
{
$this->_settings[$key] = $value;
}
/**
* Enables to Get Values using the Object Notation i.e $config->myValue;
*/
public function __get($key)
{
return $this->_settings[$key];
}
public function __isset($key)
{
return isset($this->_settings[$key]);
}
}