PHP __Constructor& __Destructor问题

时间:2009-08-19 18:06:53

标签: php constructor destructor

我一直在努力学习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');

或者与数据库的连接是否仍然打开? 因为我读到析构函数只在对象被销毁时运行。但是你如何摧毁一个物体?

5 个答案:

答案 0 :(得分:6)

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

unset($my_variable);  

所以,为了回答你的问题,在大多数情况下,你应该很好地允许析构函数处理为你关闭数据库,特别是使用小脚本。

答案 1 :(得分:3)

是的,只要您为构造函数和析构函数使用正确的名称__construct() and __destruct(),而不是您拥有的名称,这样就可以正常工作。

答案 2 :(得分:2)

一旦没有对象的引用,对象就会被销毁,例如unset() - 保存对象的最后一个变量或者脚本执行终止时。

顺便说一句,魔术方法名为__construct__destruct,没有尾随-or

答案 3 :(得分:1)

BTW,构造函数和析构函数称为__construct和__destruct。

当没有对db的引用时,将调用

__析构函数。通常,当对象超出范围时会发生这种情况,但如果您保存了对其的其他引用,则不会发生这种情况。您可以使用

删除对db的引用
unset($obj);

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

答案 4 :(得分:0)

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