others - PHP將對象實例分配給靜態屬性不能工作

我使用Laravel,得到new關鍵字的錯誤,

錯誤:


Line 3: syntax error, unexpected 'new' (T_NEW) 



代碼:


class User extends Eloquent{



 public static $user = new Fb();



 public function mySnippets(){


 return Snippet::all()->where('author','=',self::$user->getUser());


 }



}



謝謝!

时间: 作者:

不能在屬性聲明中使用new,你必須設置它,

最好是這樣:


public static function getUser() {


 if (self::$user == null) self::$user = new Fb();


 return self::$user;


}



然後始終通過檢索靜態屬性

 
self::getUser()



作者:

只能用基本類型初始化成員變數。

必須在類聲明之後分配給靜態變數,或者提供一個類級別的init方法,或者提供執行賦值的類似方法。


class User extends Eloquent {


 public static $user = null;



}



User::$user = new Fb();



作者:

你擁有全局狀態和靜態方法,這很糟糕,


class User extends Eloquent


{


 public static $user = new Fb();



 public function mySnippets(){


 return Snippet::all()->where('author','=',self::$user->getUser());


 }



}



這是錯誤的,在OOP方面,這應該類似於這個:


class User extends Eloquent


{


 private $fb;



 public function __construct(FB $fb)


 {


 $this->fb = $fb;


 }



 public function mySnippets()


 {


 return Snippet::all()->where('author', '=', $this->user->getUser());


 }


}



//Usage:



$fb = new FB();


$user = new User($fb);



var_dump($user->mySnippets());



作者:
...