Hi,
you could simply write your own, you simply need a class or a function that
given an identifier such as database.connector would return you an
instance of it, and
and maybe handle singletons.
It just a question of taste of how you want it to be.
I have just posted a few days ago my implementation, it might interest you
(I think it should work with php 5.2)
?php
class Dependency {
protected $_singletonInstances = array();
protected $_setInstances = array();
protected $_configuration;
protected static $_instance;
public static function getInstance() {
if (self::$_instance===null) {
self::$_instance = new self();
}
return self::$_instance;
}
public function setConfiguration(array $configuration) {
$this-_configuration = $configuration;
}
public function getConfiguration() {
return $this-_configuration;
}
public function __isset($serviceName) {
return isset($this-_serviceInstances[$serviceName]);
}
public function __call($serviceName, $args) {
// singleton
if (isset($this-_configuration[$serviceName])
$this-_configuration[$serviceName]['singleton']) {
if (!isset($this-_singletonInstances[$serviceName])) {
$rc = new
ReflectionClass($this-_configuration[$serviceName]['class']);
$this-_singletonInstances[$serviceName] = empty($args) ?
$rc-newInstance() : $rc-newInstanceArgs($args);
}
$ret = $this-_singletonInstances[$serviceName];
} else {
// normal
if (isset($this-_setInstances[$serviceName])) {
$ret = $this-_setInstances[$serviceName];
unset($this-_setInstances[$serviceName]);
} else {
$rc = new
ReflectionClass($this-_configuration[$serviceName]['class']);
$ret = $this-_singletonInstances[$serviceName] =
empty($args) ? $rc-newInstance() : $rc-newInstanceArgs($args);
}
}
return $ret;
}
public function __get($serviceName) {
return $this-__call($serviceName, array());
}
public function __set($serviceName, $instance) {
if (!is_object($instance))
throw new Exception('instance must be an object');
$this-_setInstances[$serviceName] = $instance;
}
}
$di=Dependency::getInstance();
$di-setConfiguration(array(
'database.connector'=array(
'singleton'=true,
'class'='DatabaseConnector'
),
'database'=array(
'singleton'=true,
'class'='Database'
)
));
class DatabaseConnector{}
class Database{
protected $_connector;
public function __construct(){
$this-setConnector(Dependency::getInstance()-{'database.connector'});
}
public function setConnector($connector){
$this-_connector=$connector;
}
}
class Test{
protected $_database;
public function __construct(){
$this-setDatabase(Dependency::getInstance()-database);
}
public function setDatabase($db){
$this-_database=$db;
}
public function getDatabase(){
return $this-_database;
}
}
$test=new Test();
var_dump($test-getDatabase());
regards,
Jean-Baptiste Verrey
On 31 October 2011 21:32, robert mena robert.m...@gmail.com wrote:
Hi,
I am trying to avoid reinventing the wheel so I am looking for
dependency injection containers that work with PHP 5.2. So Symphony2
and ZF2 DI are out of question.
I found this
http://www.potstuck.com/2010/09/09/php-dependency-a-php-dependency-injection-framework/
but I was wondering if anyone has a opinion about it or alternatives.
regards.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php