我正在学习面向对象PHP,我认为我做的事情很愚蠢。
我有一个抽象的userManager类,我想为它分配一个$ db属性,该属性将是我的抽象数据库类的实例。
数据库类是:
abstract class Bdd{
private static $instance = null;
public static function getInstance() {
return self::$instance;
}
userManager类是:
abstract class usersManager{
public $db = Bdd::getInstance();
我在这一行有错误:public $db = Bdd::getInstance();
(解析错误:语法错误,意外'(',期待','或';')
这是错的吗?
我认为我误解了抽象类,在我的情况下单身是否更好?
答案 0 :(得分:2)
当你声明一个类变量时,你不能调用一个方法,你需要做
public $db = null
public function __construct() {
$this->db = Bdd::getInstance();
}
唯一的问题是当你扩展这个类并且你需要创建一个构造函数时,你需要通过执行parent::__construct();
答案 1 :(得分:0)
public $db = Bdd::getInstance();
由于上面的行而发生错误。声明变量时无法调用方法。
答案 2 :(得分:0)
必须能够在编译时评估类参数,而不是运行时。基本上你只能预定义简单的值,比如strings,null,int的e.c.t。
因为Bdd:getInstance()
的结果在运行(即运行时)之前无法知道,所以它不能用作预定义值。
您应该将参数设置为null,然后在类构造函数方法中设置数据库实例。