我使用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()); } }
谢谢!
你不能在属性的声明中使用新的。 所以,你会当你需要它来设置它。 正如你可能希望从静态上下文中使用它,构造可能不适合(它,只有当你使用被称为new
的类,你将有不同的情况下Fb
每个对象)。
它可以像这样更好:
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();
除了其他的答案,
我还是新来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());