Mysqli_close () делает что-то кроме уничтожения объекта? - PullRequest
2 голосов
/ 31 октября 2019

Я знаю, что использование mysqli_close() не нужно, потому что PHP будет уничтожать объект, когда скрипт завершится.

Что я хотел бы знать, почему у нас такая функция в языке вообще? Делает ли он что-то еще, кроме уничтожения объекта?

Это эквивалентно $conn = null; или unset($conn);?

Имея ограниченные знания C, я заглянул в исходный код , чтобы увидеть, что происходит, когда я вызываю этот метод, но я не могу найти ничего, кроме как просто очистить внутренние указатели и вызвать efree().

Вызывать деструктор для объекта никогда не рекомендуется, так почему у нас есть специальный деструктор для mysqli?

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Помните, что mysqli - это итерация семейства функций mysql_*, которые сами по себе немного больше, чем обертки вокруг библиотеки C Connector для MySQL. mysql_close - одна из таких функций, и, естественно, она стала mysqli_close в «улучшенном» API.

В некоторых ситуациях требуется принудительное закрытие чего-либо сразу, а неожидание, когда сборщик мусора сможет обойти его и автоматически освободит ресурс.

PDO , который является лучшим универсальным API и не работает исключительно с MySQL, содержит некоторые замечаниякогда фактическое соединение будет закрыто:

При успешном соединении с базой данных экземпляр класса PDO возвращается в ваш скрипт. Соединение остается активным в течение всего времени жизни этого объекта PDO. Чтобы закрыть соединение, вам нужно уничтожить объект, убедившись, что все оставшиеся ссылки на него удалены - вы делаете это, назначая NULL переменной, содержащей объект. Если вы не сделаете этого явно, PHP автоматически закроет соединение, когда ваш скрипт завершится.

Отслеживание этих ссылок может раздражать, так что на самом деле приятно, что mysqli имеет "просто закрыть его«Мне все равно» - функция для тех ситуаций, где это имеет значение.

0 голосов
/ 01 ноября 2019

mysqli_close () используется для закрытия соединения с базой данных. Требуется для освобождения порта, который используется для подключения к базе данных. Если ваше приложение часто использует службы db, вы не должны закрывать соединение и открывать его для использования кодом. В случае, если ваш сайт не использует соединение с базой данных часто и трафика не так много, как вы можете закрыть соединение после операции, это позволит системе дышать.

...