文字列を使用してPHPクラスインスタンスを作成する 質問する

文字列を使用してPHPクラスインスタンスを作成する 質問する

クラスが 2 つあります。class ClassOne { }またはのclass ClassTwo {}いずれかになる文字列を取得しています。"One""Two"

switch次のような長い文を使用する代わりに、

switch ($str) {
    case "One":
        return new ClassOne();
    case "Two":
        return new ClassTwo();
}

文字列を使用してインスタンスを作成する方法はありますかnew Class("Class" . $str);?

ベストアンサー1

はい、できます!

$str = 'One';
$class = 'Class'.$str;
$object = new $class();

名前空間を使用する場合は、完全修飾名:

$class = '\Foo\Bar\MyClass'; 
$instance = new $class();

変数関数とメソッドを動的に呼び出すこともできます。

$func = 'my_function';
$parameters = ['param2', 'param2'];
$func(...$parameters); // calls my_function() with 2 parameters;

$method = 'doStuff';
$object = new MyClass();
$object->$method(); // calls the MyClass->doStuff() method. 
// or in one call
(new MyClass())->$method();

またPHPは文字列を持つ変数も同様ですが、これは本当に悪い習慣なので、可能な限り避けるべきです。代わりに配列を使用することを検討してください。

おすすめ記事