簡體   English   中英

PHP OOP擴展類無法訪問數據庫連接

[英]PHP OOP extending class can't access database connection

也許你可以幫忙。 我有一個創建MySql連接的主類。 然后,我擴展了這一堂課。 除非執行了parent :: __ construct();否則我無法訪問該連接。 最近在執行此操作時收到一條錯誤消息,提示我連接斷開。

因此,如何對此進行編程,以確保它不會耗盡連接並且可以訪問數據庫連接。

class Common 
{
    var $mysql;

    function __construct()
    {   
        $this->mysql=new mysqli($this->dbHOST, $this->dbUSERNAME, $this->dbPASSWORD, $this->dbNAME);
    }
}

class Role extends Common {

    function __construct()
    {
        parent::__construct();
    }
}

確保銷毀對象時關閉連接。 也就是說,添加一個__destruct()方法來關閉連接。

如果Common類是在其__construct()方法中打開連接的類,則它應該是在其__destruct()方法中關閉連接的類。 如果未在Role類上定義__destruct()方法,則PHP似乎不會自動調用父級的__destruct() (不過,我尚未對此進行測試。)一個簡單的解決方案是添加一個僅調用parent::__destruct()的存根__destruct()方法。

我認為您的類結構存在一個根本問題:您不需要每個對象的連接,只需要每個對象的連接資源的副本。

我的首選解決方法是創建一個具有單例調用的數據庫處理程序。 現在可以在任何地方調用它,並且它將始終返回相同的連接處理程序。 這也是隱藏自動初始化的絕佳方法。

該解決方案被證實了實現, 代表數據庫中的一行一類實際上是從一類就是一個數據庫連接完全不同的。 一個應用程序可以處理許多行,但很少(如果有的話)將處理多個連接。 另一種表達方式是IS-A和HAS-A定義之間的區別:說“數據庫行類IS-A數據庫連接”沒有任何意義。 說“一個datbase行類HAS-A數據庫連接”確實很有意義。

暫無
暫無

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

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