2011-08-28 56 views
9

我有這個類。PHP類拋出一個錯誤,出了什麼問題

Class User { 

    private $_name; 
    private $_email; 

    public static function factory() { 
     return new __CLASS__; 
    } 

    public function test() { 

    } 
} 

當我使用下面的語法進行靜態方法調用。

User::factory(); 

它會引發下列語法錯誤。

Parse error: syntax error, unexpected T_CLASS_C in htdocs/test/index.php on line 8 

由於Static factory()方法在靜態方法調用期間無法創建對象,因此會引發該錯誤。

當我將魔術常數__CLASSS__更改爲當前類的名稱即User時,它就起作用。

我失蹤了什麼?

+0

你爲什麼不回'self'或'$ this'?你需要一個新的對象實例嗎? – powtac

+0

是的,我需要每次打電話時創建對象的新實例。 –

回答

10

嘗試:

Class User { 

    private $_name; 
    private $_email; 

    public static function factory() { 
      $class = __CLASS__; 
      return new $class; 
    } 

    public function test() { 

    } 
} 
+0

當然有效,那不是重點,我不想以這種方式創建對象。 –

+0

您正試圖創建一個動態的回報? –

+0

是的,這是趕上 –

7

試試這個:

$class = __CLASS__; 
return new $class; 
+1

它不工作:(,拋出以下錯誤'語法錯誤,意外的T_CONSTANT_ENCAPSED_STRING' –

+0

@Ibrahim Azhar阿爾瑪:對不起,我的錯,我編輯了我的答案,這次它應該 – JRL

8

真的不知道爲什麼你的例子並不作品。但的工作是什麼

public static function factory() 
{ 
    return new self(); 
} 
+0

看起來更好。 –