call_user_func_array функция для создания обьектов

asm

Пофигист
call_user_func_array функция для создания обьектов

Есть необходимость создавать обьекты не зная заранее имя класса.
получилось следующее:
PHP:
class Application 
{
	private static $classes;

	private function __construct() {
	}

	private static function __call($class, $params)
	{
		if (!isset(self::$classes[$class]))
		{
			require(strtolower($class).'.class.php');
			self::$classes[$class] = new $class($params);
		}
		return self::$classes[$class];
	}
}
смущает передача параметров массивом а хотелось бы что-нибудь как при
call_user_func_array($class, $params)
 
Re: call_user_func_array функция для создания обьектов

Код:
private static function __call()
{
	if (func_num_args())
	{
		if (!isset(self::$classes[$class]))
		{
			$arguments = '';
			for ($it = 1; $it < func_num_args(); $it++)
			{
				$arguments .= 'func_get_arg(' . $it . '),';
			}
			$arguments = substr($arguments, 0, strlen($arguments) - 1);
			require(strtolower($class).'.class.php');
			self::$classes[$class] = null;			
			eval('self::$classes[$class] = new $class(' . $arguments . ');';
		}
		return self::$classes[$class];
	}
}
 

asm

Пофигист
хех... ну лучше уж implode если на то пошло, но eval использовать совсем не хочется :)
 

itprog

Cruftsman
Где-то уже обсуждалось такое:
PHP:
class Application 
{
    private static $classes;

    private function __construct() {
    }

    private static function __call($className, $params)
    {
        if (!isset(self::$classes[$className]))
        {
            require(strtolower($className).'.class.php');
            $class = new ReflectionClass($className);
            self::$classes[$className] = $class->newInstanceArgs($params);
        }
        return self::$classes[$className];
    }
}
 
Oo
и как ты implode собираешься передавать например ресурсы? а?
наверное причин не использовать eval у тебя найдется меньше чем причин использовать весь описаный тобою ужос
это же пхп, весь твой скрипт сплошной eval
 

StUV

Rotaredom
имхо, не надо оно никому
потом уе...ся баги ловить
лучше двигаться в сторону унификации интерфейсов "однотипных" классов
 

asm

Пофигист
itprog
да вот это и нужно.

StUV
Ну не тот согласен просто мысли текут, хочется сделать универсально :)

mishco
ты же делаешь eval :) implode клеит строчку их названий элементов массива.
 
asm
Oo
извини, не понял хода мысли
можешь привести внятный пример альтернативы eval'а с использованием implode в данном случае?
 

asm

Пофигист
mishco
6 пост. И никто не говорил про implode без eval будь внимательнее.
 
Сверху