我正在使用Laravel,但new
关键字出错。我还是OOP的新手,我做错了什么?
错误:
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());
}
}
谢谢!
答案 0 :(得分:3)
您不能在属性声明中使用new。因此,您需要在需要时进行设置。由于您可能希望在静态上下文中使用它,因此构造函数可能不合适(只有在类上使用new
时才会调用它,并且每个对象中将有Fb
的不同实例。
可能会更好:
public static function getUser() {
if (self::$user == null) self::$user = new Fb();
return self::$user;
}
然后始终通过
检索静态属性self::getUser()
答案 1 :(得分:2)
您只能使用基本类型初始化成员变量。
您必须在类声明后分配静态变量,或者提供执行赋值的类级init
方法等。
class User extends Eloquent {
public static $user = null;
}
User::$user = new Fb();
答案 2 :(得分:1)
除了另一个答案,
我还是OOP的新手,我做错了什么?
基本上一切。你有全局状态和静态方法,这很糟糕。仅仅使用静态类来包装东西并不意味着你使用OOP范例。
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());