Попробуйте:
class dbconnection {
private static $conn;
public static function OpenConnection() {
require("../Config/dbconfig.php");
self::$conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
mysql_select_db('MyDB');
}
public static function CloseConnection() {
mysql_close(self::$conn);
}
}
Вы пытаетесь получить доступ к переменной-члену $conn
, но вы делаете это неправильно, поэтому вы просто создаете новую (локальную) переменную для использования. Это не имеет значения при открытии (ссылка просто отбрасывается), но при закрытии вы больше не имеете дело с ссылкой на ресурс.
Во-вторых, ваши функции статичны, а переменная-член - нет. Вот два метода, которые вы используете для доступа к переменным-членам:
class A {
private $a;
private static $b;
public static function foo() {
$this->a = 3; // instance member
self::$b = 4; // static member
}
}
Редактировать: в отношении последней функции, она работает, когда вы удаляете вызов к CloseConnection()
, потому что она больше не пытается получить доступ к соединению с базой данных через локальную переменную $conn
(что приведет к ошибка).
Нет, не рекомендуется закрывать соединение с базой данных немедленно. Самая распространенная практика в PHP - просто открыть соединение в верхней части вашего скрипта, а затем больше ничего не делать. Когда скрипт выйдет, он закроется. Некоторые люди открывают связи по требованию, то есть они не будут пытаться создать их, пока они не понадобятся. Это приемлемая оптимизация (с точки зрения не добавления ненужной сложности). Как правило, соединение никогда не будет явно закрыто. Он будет закрыт неявно, когда скрипт завершится.
Долгоживущие сценарии, возможно, захотят использовать другой подход, просто чтобы не создавать ненужных открытых соединений в течение длительных периодов.
Возможно, в какой-то момент вы захотите использовать постоянные соединения.
Вышеуказанный метод достаточно прост и достаточен для некоторых довольно больших сайтов. Как правило, не пытайтесь оптимизировать этот материал и вносить ненужную сложность, пока у вас не возникнет проблема, с которой нужно что-то делать.