2013-03-29 91 views
0

我有一個關於抽象類簡單的靜態方法問題

abstract class testMaster 
{ 

    public function __construct($b, $a) 
    { 
     $this->a = $a; 
     $this->b = $b; 
    } 

    public static function create($test) 
    { 
     //handle test 
     switch($test) { 
     case 'test1': 
      require_once 'test1.class'; 
      return new test1($a, $v); 
      break; 
     case 'test2': 
     case 'test3': 
      require_once 'test2.class'; 
      return new test2($a, $v); 
      break; 


     } 
    } 

class tester extends testMaster{ 

    codes... 

} 

我的問題是

,如果我想調用靜態「create」方法的問題,如何調用它。我使用testMaster::create()但它似乎沒有任何回報。有小費嗎?非常感謝!

+3

這只是一個錯字? '返回新的test2($ a,$ v;'注意缺少右括號 –

+0

這只是一個約定,但是用第一個大寫字母(例如TestMaster)來區分它們和方法是很有用的 –

+0

「我使用了testMaster: :create(),但它似乎沒有返回任何東西。「另外,由於上面提到的錯字,PHP可能會失敗優雅 –

回答

0

有幾件事情(見註釋):

abstract class testMaster 
{ 

    public function __construct($b, $a) 
    { 
     $this->a = $a; 
     $this->b = $b; 
    } 

    public static function create($test) 
    { 

     switch($test) { 
     case 'test1': 
      require_once 'test1.class'; 
      return new test1($a, $v); 
      break; 
     case 'test2': 
     case 'test3': 
      require_once 'test2.class'; 
      return new test2($a, $v); // Missing a ')' 
      break; 


     } 
    } 

} // Missing '}' 

class tester extends testMaster{ // Should be 'extends' 


} 
0

如果你只需要調用testMaster::create(),那麼你就不能傳遞一個參數到$測試。由於沒有用於$ test的開關箱是空的,並且您尚未聲明default的情況,它只是運行到Create()的底部,並且不返回任何內容。

0

是,一旦你已經解決了語法錯誤,你可以叫

$obj = testMaster::create('test1'); 

順便說一句,我肯定會建議你使用一些Class Loader機制,避免使用需要調用。此外,如果您對精心設計的測試感興趣,可以查看PHPUnit