web-dev-qa-db-ja.com

PHPクラスの名前からオブジェクトを文字列としてインスタンス化できますか?

クラス名が文字列に格納されている場合、PHPでクラスの名前からオブジェクトをインスタンス化することは可能ですか?

68
user135295

うん、間違いなく。

$className = 'MyClass';
$object = new $className; 
115
brianreavis

はい

<?php

$type = 'cc';
$obj = new $type; // outputs "hi!"

class cc {
    function __construct() {
        echo 'hi!';
    }
}

?>
5
Mr. Smith

静的すぎる:

$class = 'foo';
return $class::getId();
1
Andrew Atkinson

クラス名/メソッドをデータベースなどのストレージに保存することにより、いくつかの動的呼び出しを行うことができます。クラスがエラーに対して回復力があると仮定します。

sample table my_table
    classNameCol |  methodNameCol | dynamic_sql
    class1 | method1 |  'select * tablex where .... '
    class1 | method2  |  'select * complex_query where .... '
    class2 | method1  |  empty use default implementation

など。その後、クラスおよびメソッド名にデータベースから返された文字列を使用して、コード内で。クラスのSQLクエリ(想像力次第で自動化のレベル)を保存することもできます。

$myRecordSet  = $wpdb->get_results('select * from my my_table')

if ($myRecordSet) {
 foreach ($myRecordSet   as $currentRecord) {
   $obj =  new $currentRecord->classNameCol;
   $obj->sql_txt = $currentRecord->dynamic_sql;
   $obj->{currentRecord->methodNameCol}();
}
}

このメソッドを使用して、REST Webサービスを作成します。

0
Hugo R