crocodile2u
http://vbolshov.org.ru
call_user_func() & __construct()
Имеем:
В PHP5 это код (вполне ожидаемо) приводит к ошибке (Fatal error: Non-static method test::__construct() cannot be called statically).
В результате, если мы хотим динамически создавать объекты (и не ограничивать себя при передаче параметров конструктору), приходится прибегать к eval() :
Собсно, вопрос: верно ли я понимаю, что для решения такой задачи в сегодняшнем PHP можно воспользоваться только eval().
ЗЫ: вопрос скорее из области теории. На практике, имхо, лУчшим вариантом будет использовать factory method | abstract factory - созданные специально для тех классов, объекты которых мы хотим получить от данной фабрики.
Имеем:
PHP:
class test {
function __construct($param)
{
}
}
$object = call_user_func_array(array('test', '__construct'), array('argument'));
В результате, если мы хотим динамически создавать объекты (и не ограничивать себя при передаче параметров конструктору), приходится прибегать к eval() :
PHP:
/**
* Взято с http://ru2.php.net/call_user_func_array;
* функция нуждается в шлифовке, но подход ясен.
*/
function createObjArray($type,$args=array()) {
$paramstr = '';
for ($i = 0; $i < count($args); $i++) {
$paramstr .= '$args['.$i.'],';
}
$paramstr = rtrim($paramstr,',');
return eval("return new $type($paramstr);");
}
ЗЫ: вопрос скорее из области теории. На практике, имхо, лУчшим вариантом будет использовать factory method | abstract factory - созданные специально для тех классов, объекты которых мы хотим получить от данной фабрики.