PHP分配对象实例的静态属性不工作[复制](PHP assign object instance t

2019-08-19 07:06发布

这个问题已经在这里有一个答案:

  • 同时使静态类数据库收到此错误 4个回答

我使用Laravel和我得到与错误new关键字。 我还是新来OOP concepets,我究竟做错了什么?

错误:

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()); } } 

谢谢!

Answer 1:

你不能在属性的声明中使用新的。 所以,你会当你需要它来设置它。 正如你可能希望从静态上下文中使用它,构造可能不适合(它,只有当你使用被称为new的类,你将有不同的情况下Fb每个对象)。

它可以像这样更好:

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

然后始终检索通过静态属性

self::getUser()


Answer 2:

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

你必须分配给静态变量的类声明之后,或提供类级别init方法或者不分配等。

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

}

User::$user = new Fb();


Answer 3:

除了其他的答案,

我还是新来OOP concepets,我究竟做错了什么?

基本上一切。 你既有全局状态和静态方法,这是不好的。 刚开始使用以静态类包装的东西并不意味着你使用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());


文章来源: PHP assign object instance to a static property not working [duplicate]
标签: php oop laravel