2012-05-09 54 views
1

這是一些僞代碼,代表您不會理解範圍的代碼。通過字符串引用類變量

班級測試員有私人增值稅,舉辦班。 數組包含var的基本名稱。 功能欄嘗試構建字符串中的變量,然後使用它。 如果這不能做到我理解,但我只是構造一個變量名稱。所有的

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); 
+3

嗯,是的,這肯定是行不通的。字符串不是對象.... – 2012-05-09 19:36:02

+0

或者您可以設置一個對象數組(以字符串作爲鍵)並循環。 – 2012-05-09 19:37:57

回答

2

首先,你似乎是調用對象的方法 - 即使你評估字符串獲取類,你仍然需要實例化對象。

你可以這樣做:

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

見例如3 here,或者訪問相關discussion

更新:

如果一個變量名是已知的,使用$$fullClassName->doWork()

+0

類在嘗試前被初始化 – Rawb

+0

如果它是靜態方法,他不需要實例化對象。 – Tushar

+0

$ this - > $$ mapperName-> fetchAll($ options); – Rawb