Это можно сделать, но вы должны делать это только с использованием белого списка возможных объектов для создания. В противном случае это опасно. Система, которая открыта, не может быть хорошей идеей. Если вы можете переосмыслить проблему, это может помочь подойти к ней по-другому.
Чтобы решить вашу проблему, вы можете использовать такую конструкцию:
// Possible values:
$acceptable_classes = array('myClass1', 'myClass2', 'myClass3');
// If it is an allowed class,
if (in_array($_POST['object']['name'], $acceptable_classes) {
// Store it in a variable.
$class = $_POST['object']['name'];
$obj = new $class;
}
Вам необходимо сохранить аналогичный белый список для функции. Для этого вы можете использовать многомерный массив. Вы можете расширить это, чтобы сохранить приемлемые параметры для возможных функций. Он может раздуваться довольно быстро, но поможет сохранить безопасность.
$acceptable_classes = array(
'myClass1' => array(
'func1', 'func2'
),
'myClass2' => array(
'func3', 'func4'
)
);
if ($acceptable_classes, array_key_exists($_POST['object']['name']) {
if (in_array($_POST['function']['name'], $acceptable_classes($_POST['object']['name'])) {
// Store it in a variable.
$class = $_POST['object']['name'];
$obj = new $class;
$func = $_POST['function']['name'];
return json_encode($obj->$func($_POST['function']['params']));
}
}