检查php是否对象是类的实例而不是子类

时间:2015-11-13 16:51:55

标签: php oop constructor

我有这些课程

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 Catchable致命错误:传递给:: __ construct()的参数1必须是db的实例,给定的实例

我该怎么做才能解决问题:

  • 强制类c构造函数将类调用为构造函数。但是怎么样?
  • 在类b中,构造函数从参数中决定调用类的构造函数的正确方法。
  • 在类b中,构造函数决定是直接实例化还是从扩展类c中使用正确的方法将类调用为构造函数。

1 个答案:

答案 0 :(得分:0)

在B类构造函数中使用get_class($this),您将能够区别于从C调用父构造函数或直接调用。

请参阅:http://php.net/manual/en/function.get-class.php,示例#2。

Iansus。