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

  • Автор темы Автор темы asm
  • Дата начала Дата начала

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];
	}
}
 
хех... ну лучше уж implode если на то пошло, но eval использовать совсем не хочется :)
 
Где-то уже обсуждалось такое:
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
 
имхо, не надо оно никому
потом уе...ся баги ловить
лучше двигаться в сторону унификации интерфейсов "однотипных" классов
 
itprog
да вот это и нужно.

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

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