2

我一直在尝试学习 PHP 的面向对象方面,并且想知道:

如果我使用 _constructor 打开与数据库的连接,使用该类中的函数(例如插入),定义的 __destructor 会在执行方法“insert”后关闭连接吗?

class data(){
  function __constructor {
    // connect to db
  }

  function insert($data){
    // mysql_query(...)
  }

  function __destructor {
    // close connection to db
  }
}

$obj = new db();
$obj->insert('mumbo jumbo');

还是与数据库的连接仍处于打开状态?因为我读到析构函数仅在对象被销毁时运行。但是你如何摧毁一个物体?

4

5 回答 5

6

在 PHP 中,对象在超出范围时被销毁。这通常是在脚本停止执行或在其中创建的函数结束时,但您可以在代码的早期使用以下方法销毁对象:

unset($my_variable);  

因此,要回答您的问题,您应该可以让析构函数在大多数情况下为您处理关闭数据库,尤其是在使用小脚本时。

于 2009-08-19T18:10:42.113 回答
3

是的,只要您使用正确的名称,__construct()并且__destruct()对于您的构造函数和析构函数,这将正常工作,而不是您在那里拥有的名称。

于 2009-08-19T18:12:21.033 回答
2

一旦不再引用该对象,该对象就会被销毁,例如通过unset()-ting 保存该对象的最后一个变量或脚本执行终止时。

顺便说一句,魔术方法被命名为__constructand __destruct,没有尾随-or.

于 2009-08-19T18:12:33.140 回答
1

顺便说一句,构造函数和析构函数称为 __construct 和 __destruct。

__destructor 将在不再引用db. 通常,当对象超出范围时会发生这种情况,但如果您保存了对它的其他引用,则不会发生这种情况。您可以删除对dbusing的引用

unset($obj);

同样,如果您已将 $obj 存储在任何地方。

于 2009-08-19T18:13:54.090 回答
0

请记住,PHP 还支持与数据库的持久连接,这意味着即使您的对象已被销毁,与 DB 的连接仍然“在后台”打开,并且在您调用相应的 pconnect(或 PDO 类似物)时将被重用下一次。

于 2009-08-19T18:20:24.887 回答