1

これは、スコープを理解できない私のコードを表す擬似コードです。

Class Tester にはプライベート変数、ホールド クラスがあります。配列は var のベース名を保持します。関数 bar は、文字列内の変数を構築してから使用しようとします。これができない場合は理解できますが、変数名を作成しているだけです。

Class Tester{

     private $preClass1post = new TestClass1();

     private $preClass2post = new TestClass2();;

     private $preClass2post = new TestClass2();;

     public $classBasicNames = array('Class1','Class2','Class3');

     function Bar(){
          foreach($classBasicNames as $classBasicName){

             $fullClassName = 'PreText'.classBasicName.'PostText';

             $fullClassName->DoWork();
             //always throws object does not exist
          }

}

}


                    //actual code for context
            $mapperName = 'mapper'.$entityName.'Stat';
            echo $mapperName;
            $dbos = $this->{$mapperName}->fetchAll($options);
4

1 に答える 1

2

まず第一に、あなたはオブジェクトのメソッドを呼び出しているようです-クラスを取得するために文字列を評価したとしても、オブジェクトをインスタンス化する必要があります。

できるよ:

$class = 'PreText'.classBasicName.'PostText';
$object = new $class();
$object->DoWork();

こちらの例3を参照するか、関連するディスカッションにアクセスしてください。

アップデート:

変数名がわかっている場合は、$$fullClassName->doWork()

于 2012-05-09T19:37:54.527 に答える