用于从方法创建新对象的Nice Syntaxe

时间:2014-11-28 19:23:30

标签: php coding-style

有一种快捷方法可以从返回字符串的方法创建对象吗?

目前,我用过:

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();

1 个答案:

答案 0 :(得分:0)

有获取字符串的快捷语法,但不是用于在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。有趣的是,如果我用以下内容替换我的单行程序,除了HipHop虚拟机(hhvm-3.0.1 - 3.4.0)之外,它在所有版本的PHP中都会失败:

$entityName = new ( ( new MyClass() )->getEntityName() );