-1

我正在使用 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());
    }

}

谢谢!

4

3 回答 3

4

不能在属性声明中使用 new。因此,您必须在需要时进行设置。由于您可能想从静态上下文中使用它,因此构造函数可能不合适(仅在您new在类上使用时才会调用它,并且每个对象中都会有不同的实例Fb)。

像这样可能会更好:

public static function getUser() {
   if (self::$user == null) self::$user = new Fb();
   return self::$user;
}

然后总是通过检索静态属性

self::getUser()
于 2013-04-03T17:19:52.897 回答
2

您只能使用基本类型初始化成员变量。

您必须在类声明之后分配给静态变量,或者提供进行分配的类级init方法等。

class User extends Eloquent {
  public static $user = null;

}

User::$user = new Fb();
于 2013-04-03T17:18:02.483 回答
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());
于 2013-04-03T17:34:08.373 回答