PHP: Создать новый объект класса непосредственно из строкового возвращаемого значения (строковый литерал)

Есть ли возможность создать новый объект по строке, возвращаемой функцией или методом в PHP? Как какой-нибудь способ побега я не знаю?

Нерабочий пример:

new ($class->method())();
new "stringliteral"();
new ($class = $class->method())();

3 ответа

Вы можете сделать это с помощью ReflectionClass

function makeRef($className) {
    return new ReflectionClass($className);
}
$obj = makeRef($class->method())->newInstance();

В PHP 5.4+ вы можете превратить это в однострочник:

$obj = (new ReflectionClass($class->method()))->newInstance();

Вы хотите динамическое создание класса? вот читай: http://docstore.mik.ua/orelly/webprog/pcook/ch07_13.htm

Хотя это нормально для вызова динамической функции, выполнение этого для класса кажется трюком.

Да, это возможно. Присвойте строку переменной, затем создайте объект, используя эту переменную.

Ex.

<?php
class stringliteral{
  function __construct()
  {
    echo"called";
  }
}
function dumyFunc()
{
  return 'stringliteral';
}
$str=dumyFunc();
if(class_exists($str))
$obj=new $str();
?>
Другие вопросы по тегам