Всем привет!
Значит так:
Есть старый старый-пристарый код, чуть-ли не пятнадцатилетней давности, который должен работать в том числе старых версиях php (от 5 до 5.4).
Есть разные объекты, которые вызываются по всему коду и хранятся в глобальных переменных.
Например так:
$db = new db('localhost', 'user', 'password');
ну и дальше пошло в функциях
function getlist()
{
global $db;
$db->getlist($sql)
... блабла бла
}
А я хочу, чтобы:
objects::create('db', 'localhost', 'user', 'password');
потом где надо
$db = objects::get('db');
Делаю что-то вроде хранилища, в котором все эти объекты будут хранится, вместо глобальных переменных.
class objects
{
private static $obj;
private $row = array();
public static function obj()
{
if (is_null(self::$obj))
{
self::$obj = new self;
}
return self::$obj;
}
public static function create()
{
$args = func_get_args();
$object = $args[0];
unset($args[0]);
if (is_null(self::get($object)))
{
//!!!Вот тут object() мне надо передать $args - но н в в массив.
// Можно new $object(...$args), однако это будет работать только в php > 5.4
self::obj()->row[$object] = new $object();
}
return self::get($object);
}
static public function get($object)
{
if (!empty(self::obj()->row[$object]))
{
return self::obj()->row[$object];
}
}
}
Но вот беда! Я не знаю количество аргументов, которое будет передаваться этому самому объекту!
По идее мог бы сделать и передать аргументы в виде массива:
new $object(...$args)
Но это будет работать только в php > 5.4, а мне нужно сохранить поддержку и старых версий php.
Есть какое-то решение, помимо eval пожалуй?