簡體   English   中英

PHP OOP這樣關閉連接是否是一個好習慣

[英]PHP OOP Is it a good practice to close connection like this

這是我的數據庫類

class DataBase{
  public $_localhost  = "localhost";// server name => usually is localhost
  public $_user       = "root"; // username for the database
  public $_password   = "123"; // password for the database
  public $_dbname     = "ecommerce"; // database name
  public $db          = false;

  public  function __construct(){
    try{
      $this->db = new PDO("mysql:host=".$this->_localhost.";dbname=".$this->_dbname,$this->_user,$this->_password);
      $this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
      $this->db->exec("SET NAMES utf8");
      return $this->db;
    }catch(PDOException $e){
      echo $e->getMessage();
    }
  }

  public function __destruct(){
    $this->db = null;
  }
}

現在在我的應用程序類中

class Application{
  public $db;

  public function __construct(){
    $this->db =  new DataBase();
    $this->db = $this->db->db;
  }
}

因為我想使用我的破壞函數來關閉我的連接

這是個好方法嗎?

您不需要在典型的php流中關閉數據庫連接。 一旦返回響應,並且該對象的所有引用均不可訪問,PHP運行時將自行執行此操作。

在許多網站中,無論如何都需要持久連接,因為它們會減少每次將請求發送到您的站點時打開和關閉連接的開銷。

查看有關PDO :: ATTR_PRESISTENT(示例4)的文檔

但是,如果您知道連接將閑置幾分鍾,則可能需要在長時間運行的非Web進程中自行關閉數據庫連接。

在這種情況下,將PDO對象設置為null可以向PHP發出可能已關閉此特定連接的信號。

析構函數是錯誤的地方。 向您的類中添加一個不依賴PHP運行時調用的自定義close方法。

順便說一句:

在您的Application實例和數據庫連接(-wrapper)之間創建不必要的硬耦合被認為是不好的做法。 我建議您更改應用程序類以允許構造函數注入數據庫實例。 這確實可以幫助您稍后測試/模擬代碼並提高可重用性。

如果您想了解有關php中的一般概念和實現示例的更多信息,請參閱Fabien Potencier撰寫的系列博客文章。

暫無
暫無

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

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