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


check in php if a object is a instance of a class but not a instance of a subclass

我有这些类

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。