我有这些类
class db {
}
class el {
public function __construct (db $db) {
$this->db = $db;
}
}
class a {
public function __construct (db $db) {
}
}
class b extends a {
public function __construct ($db) {
parent::__construct($db);
}
}
class c extends b {
public function __construct ($db) {
parent::__construct($db);
}
}
如果我实例化类b,则一切正常
new b(new el(new db ()));
但如果我实例化类c,则会得到一个错误
new c(new el(new db ()));
PHP可捕获的致命错误:传递给::__construct()的参数1必须是给定的db实例、el实例
我应该怎么做才能解决这种情况:
- 强制类c构造函数调用类a构造函数。但是怎么做呢
- 在类b中,构造函数根据参数决定调用类a构造函数的正确方式
- 在类b中,构造函数决定是直接实例化还是从扩展类c中实例化,并使用正确的方法调用类a构造函数
在B类构造函数中使用get_class($this)
,您将能够区分对父构造函数的调用与C或直接调用。
请参阅:http://php.net/manual/en/function.get-class.php,示例#2。
Iansus。