0

GeneralObj を持つシステムを作成しようとしています。GeneralObj を使用すると、ユーザーはテーブル名の文字列を使用して、データベースのテーブルの特別なオブジェクトを開始できます。これまでのところ、それは完璧に機能します。

class GeneralObj{
    function __construct($tableName) {
        //...
    }
}

しかし、毎回 new GeneralObj(XXX) を入力するのは面倒です。実際に new GeneralObj(XXX) と同じように実行されている new XXX() のようにプロセスを単純化することは可能でしょうか? include_path の設定でファイルを動的にロードするための PHP 提供の __autoload メソッドを見つけましたが、実際に定義ファイルが存在する必要があります。少しだけ変更した同じ定義ファイルをコピーしてコピーしたくありません。

原因として、 eval はオプションではありません。

4

4 に答える 4

1

継承を使用します。GeneralObj をテーブル固有のクラスのスーパークラスにします。このようにして、クラス名を動的に派生させ、オブジェクトをインスタンス化できます。例:

class someTable extends GeneralObj {

}


$tableName = 'some';
$className = $tableName . 'Table';

$obj = new $className;
于 2013-04-05T09:40:48.483 に答える
0

いいえ、これは不可能です。

runkit拡張機能を使用すると、PHP ランタイム環境をプログラムで操作できますが、これを行うことはできません。たとえそれができたとしても、それは非常に悪い考えであり、いくつかのキーストロークを節約する代わりに、アプリケーションの要件と複雑さに大きな影響を与えます.

無関係なメモとして、あなたのクラスには、依存性注入コンテナーGeneralObjの機能のように疑わしい機能があります。おそらく、それを交換することを検討する必要がありますか?

于 2013-04-05T09:01:14.190 に答える