簡體   English   中英

在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 ()));

但是如果我實例化類,就會出錯

new c(new el(new db ()));

PHP可捕獲的致命錯誤:傳遞給a :: __ construct()的參數1必須是db的實例,給定el的實例

我應該怎么做才能解決這種情況:

  • 強制c類構造函數調用類的構造函數。 但是如何?
  • 在類b中,構造函數根據參數確定調用類構造函數的正確方法。
  • 在類b中,構造函數確定是直接實例化還是從擴展類c進行構造,並使用正確的方法將類稱為構造函數。

在B類構造函數中使用get_class($this) ,您將能夠區別於從C調用父構造函數還是直接調用。

參見: http : //php.net/manual/en/function.get-class.php ,示例2。

Iansus。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM