我一直在努力学习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');
或者与数据库的连接是否仍然打开? 因为我读到析构函数只在对象被销毁时运行。但是你如何摧毁一个物体?
答案 0 :(得分:6)
在PHP中,当一个对象超出范围时会被销毁。这通常是在脚本停止执行或者在结束时创建它的函数时,但您可以使用以下命令在代码的早期销毁对象:
unset($my_variable);
所以,为了回答你的问题,在大多数情况下,你应该很好地允许析构函数处理为你关闭数据库,特别是使用小脚本。
答案 1 :(得分:3)
是的,只要您为构造函数和析构函数使用正确的名称__construct()
and __destruct()
,而不是您拥有的名称,这样就可以正常工作。
答案 2 :(得分:2)
一旦没有对象的引用,对象就会被销毁,例如unset()
- 保存对象的最后一个变量或者脚本执行终止时。
顺便说一句,魔术方法名为__construct
和__destruct
,没有尾随-or
。
答案 3 :(得分:1)
db
的引用时,将调用__析构函数。通常,当对象超出范围时会发生这种情况,但如果您保存了对其的其他引用,则不会发生这种情况。您可以使用
删除对db
的引用
unset($obj);
同样如果你已经将$ obj存储在任何地方。
答案 4 :(得分:0)
请记住,PHP还支持与数据库的持久连接,这意味着即使您的对象已被销毁,与DB的连接仍然在“后台”打开,并在您调用相应的pconnect时重用(或PDO模拟)下一次。