繁体   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