Существует ли ярлык для создания объекта из метода, возвращающего строку?
На данный момент я использовал это:
class MyClass {
/**
* @return string
*/
public function getEntityName() {
return 'myEntityName';
}
}
$myClassInstance = new MyClass();
// Need to get string
$entityName = $myclassInstance->getEntityName();
// And after I can instantiate it
$entity = new $entityName();
Существует сокращенный синтаксис для получения строки, но не для создания объекта из строки на сегодняшний день в PHP. Посмотрите следующий код, в который я также включил класс myEntityName:
<?php
class myEntityName {
public function __construct(){
echo "Greetings from " . __CLASS__,"\n";
}
}
class MyClass {
/**
* @return string
*/
public function getEntityName() {
return 'myEntityName';
}
}
$entityName = ( new MyClass() )->getEntityName();
$entity = new $entityName();
В одной строке код создает экземпляр объекта MyClass а также выполняет метод getEntityName, который возвращает строку $ entityName. Интересно, что если я заменил свой однострочный текст на следующий, он потерпит неудачу во всех версиях PHP, кроме виртуальной машины HipHop (hhvm-3.0.1 — 3.4.0):
$entityName = new ( ( new MyClass() )->getEntityName() );
Других решений пока нет …