0

私はこのコードを持っています:

$node = new Node();

「ノード」オブジェクトを動的にしたいので、構成
クラスから動的な名前を取得します。これは機能します。

$var = Config::instance('modules/activities/config')->get('className');
$node = new $var();

しかし、どうすればこれを1行で書くことができますか?
これは機能しません:

$node = new Config::instance('modules/activities/config')->get('className')();
4

4 に答える 4

1

これは、PHP5.4以降の新しい言語機能です。

インスタンス化時のクラスメンバーアクセスが追加されました(例:(new Foo)-> bar()

http://docs.php.net/manual/en/migration54.new-features.phpを参照してください

于 2012-09-05T13:54:40.223 に答える
0

オブジェクトを返すようにインスタンスメソッドを変更すると、その構文を使用できるようになります。何かのようなもの :

public static function instance()
{
    if (!self::$instance)
        self::$instance = new new Config();
    return self::$instance;
}
于 2012-09-05T13:56:28.257 に答える
0

同僚が助けてくれました。ヘルパークラスで静的関数を作成しました。

public static function factory($name = '',  $var = NULL)
{
    $object = new $name((isset($var)) ? $var : '');
    return $object;
}

これが私のコードです(多分少し厄介に見えます):

$node = Helper::factory(Config::instance('modules/activities/config')->get('className'), $var);
于 2012-09-05T13:52:48.207 に答える
-3

単純。それらを1行で書くには、次のようにそれらの間に改行を使用しないでください:

$var = Config::instance('modules/activities/config')->get('className');$node = new $var();
于 2012-09-05T13:48:13.793 に答える