php - mysqli_close() 除了销毁对象之外还执行其他操作吗?

标签 php mysqli php-internals

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

我想知道的是为什么我们的语言首先要有这样的功能?除了破坏物体之外,它还有其他作用吗?

它是否相当于$conn = null;unset($conn);

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

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

最佳答案

请记住,mysqlimysql_* 系列函数的迭代,这些函数本身只不过是 C Connector Library 的包装器。对于MySQL。 mysql_close就是这样一个函数,并且自然地成为“改进的”API 中的 mysqli_close

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

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 对于那些重要的情况有一个“只需关闭它,不关心”功能实际上很好。

关于php - mysqli_close() 除了销毁对象之外还执行其他操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58649950/

相关文章:

php - 如何使用资源逐行写入但仍然使用 Laravel 的内置存储?

javascript - PHP使用复选框从数据表中删除多行

php - INSERT INTO & LAST_INSERT_ID inside Query inside 函数

php - 筛选产品 价格并排序 升序 描述 PHP MYSQLI

php - PHP 是如何实现它的 all fit container `array` 的?

php - 从开始日期到结束日期,打印第三个变量的计数

javascript - 即时搜索延迟1个字符

php - MySQLi 相对于 MySQL 的优势

php - PHP 扩展中的 SEG 错误

c - zend 自定义模块