mysqli_close() 除了销毁对象之外还会做其他事情吗?

Does mysqli_close() do anything other than just destroying the object?

我知道不需要使用 mysqli_close(),因为 PHP 会在脚本完成时销毁对象。

我想知道的是,当初为什么我们的语言会有这样的功能呢?除了破坏对象之外,它还有其他作用吗?

是否等同于$conn = null;unset($conn);

由于 C 知识有限,我查看了 source code 以查看调用此方法时会发生什么,但除了清除内部指针和调用 efree() 之外,我找不到任何其他内容。 =16=]

从不推荐在对象上调用析构函数,那么为什么我们要为 mysqli 提供一个特殊的公开析构函数?

请记住,mysqlimysql_* 函数族的迭代,它们本身只不过是 C Connector Library for MySQL. mysql_close 的包装器而已,自然成为 mysqli_close 在 "improved" API.

在某些情况下,您希望立即强制关闭某些内容,而不是等待垃圾收集器绕过它并自动释放资源。

PDO,这是一个更好的 API 全面并且不专门处理 MySQL,有一些关于何时实际关闭连接的注释:

Upon successful connection to the database, an instance of the PDO class is returned to your script. The connection remains active for the lifetime of that PDO object. To close the connection, you need to destroy the object by ensuring that all remaining references to it are deleted—you do this by assigning NULL to the variable that holds the object. If you don't do this explicitly, PHP will automatically close the connection when your script ends.

追踪这些引用可能很烦人,所以 mysqli 有一个 "just close it, don't care" 函数来处理那些重要的情况,这实际上很好。