Короткие: Да, это закроет соединение MySQLi.
Почему: Важно отметить, что в PHP, Объекты всегда передается по ссылке. То есть переменная на самом деле является ссылкой на пространство памяти, которое представляет этот объект, и везде, где значение этой переменной идет, оно всегда будет указывать на одно и то же пространство в памяти и, следовательно, на один и тот же объект.
Пример:
Ниже показана разница между прохождением по копии, пройти по ссылке, и как объекты работы:
function copy_increment($int) {
$int++;
}
function reference_increment(&$int) {
$int++;
}
function object_increment($object) {
$object->int++;
}
function maybe_destroy($object) {
unset($object);
}
$object = new StdClass();
$object->int = 1;
$int_val = 1;
var_dump($int_val); // 1
copy_increment($int_val); // Not passed by reference
var_dump($int_val); // 1
reference_increment($int_val); // Passed by reference
var_dump($int_val); // 2
var_dump($object); // int = 1
object_increment($object); // Always passed by reference
var_dump($object); // int = 2
// But here you can see that the parameters are
// still copies, but copies of the pointer and
// un-setting only effects the current scope.
maybe_destroy($object);
var_dump($object); // int = 2
Вы можете увидеть это в действии here. Что это значит в вашем случае? Это означает, что да, когда вы передаете соединение MySQLi и храните его, а затем закройте его, он обязательно закроет все копии этого объекта.
Существует поймать здесь в том, что вы можете объекты клон, но MySQLi является то, что они называют «не-клон-объект в состоянии», и это будет убивать ваше приложение, если вы пытаетесь ... :-(
ПРИМЕЧАНИЕ: Соединение MySQLi не должно быть явно закрыто, и соединение прекратится, когда объект будет уничтожен (в конце приложения или во время сбора мусора), поэтому вам никогда не придется явным образом нажимаю на него.
Другим вариантом может быть фабричный класс или функция, которая строит соединение по требованию. объект к конструктору и сохранить уникальное соединение с этим объектом. Я не могу сразу подумать, почему это было бы полезно, но было бы довольно легко настроить и позволит вам закрыть соединения в течение всего дня. ;-)
Действительно, вам не нужно закрывать его вручную, особенно если вы только начинаете.
В чем вопрос? Почему вызов close закрывает ваше соединение? –
@RaelGugelminCunha Ну, вопрос в том, что '$ this -> var -> close();' фактически закрывает мое соединение mysqli? – d3nm4k
Поскольку атрибут '$ var' объекта имеет ваш объект' $ mysqli', передается в конструкторе, и вы вызываете 'close()' на нем, а '$ mysqli-> close()' закрывает ваше соединение. –