Страшный Злодей
Бывший член клуба (достало хамство).
Всегда писал в процедурном стиле и все устраивало. Но вот сейчас почему-то захотелось в попробовать написать что-то в стиле ООП. Захотелось, ну и сразу как-то обломалось... Короче говоря, столкнулся с тем, что не могу придумать как правильно спроектировать взаимодействие классов с подключением к БД. Собственно моя проблема в том, что хочется прописывать все учетные данные БД (логин, пароль, хост, имя базы) и настройки подключения в одном файле и в дальнейшем использовать это подключение во всех создаваемых классах, каждый из которых планирую размещать в отдельных файлах. Прошу прощения, если вопрос сформулировал слишком расплывчато, попробую обобщить сказанное примером:
Есть файл подключения к БД dbconn.php (в комментах некоторые вопросы):
Вот проект одного класса для работы с некоторым объектом:
Правильно ли такое взаимодействие или есть варианты получше?
P/S: Наверняка, для тех кто имеет опыт работы с ООП такой вопрос покажется не самым умным, но меня он занимает и тормозит уже длительное время. Так-что буду очень признателен за любой дельный совет.
Есть файл подключения к БД dbconn.php (в комментах некоторые вопросы):
PHP:
class DBConnection {
private $db_host = 'localhost';
private $db_name = 'name';
private $db_username = 'user';
private $db_password = 'password';
public $mysqli;
/*
или лучше так?
private $mysqli;
public $result;
тогда придется создавать методы для каждого взаимодействия с базой: SELECT, UPDATE, INSERT и т.д... нужно ли это?
*/
public function __construct() {
$this->mysqli = new mysqli( $this->db_host, $this->db_username, $this->db_password, $this->db_name );
if (mysqli_connect_errno()) {
printf("Подключение к серверу MySQL невозможно. Код ошибки: %s\n", mysqli_connect_error());
exit;
}
if (!$this->mysqli->set_charset("utf8")) { // какие-то настройки БД, например установка кодировки
printf("Error loading character set utf8: %s\n", $mysqli->error);
}
return $this->mysqli;
/* Закрываем соединение, если вместо "public $mysqli" решим использовать "public $result"
function __destruct() {
$this->mysqli->close();
}
*/
}
PHP:
<?php
require_once('dbconn.php');
class Article {
$this->link = new DBConnection;
function __construct ( $link, $table, $id ) { ... }
public function SelectFromBase () { // какие-то действия по выборке из базы
$row = $link->sql_query("SELECT * FROM `articles` WHERE `id` = '$id'", 'fetch_assoc');
print_r($row);
}
public function WriteToBase ( ) { ... }
public function ReadFromBase ( ) { ... }
public function CheckInBase ( ) { ... }
public function RemoveFromBase ( ) { ... }
}
?>
P/S: Наверняка, для тех кто имеет опыт работы с ООП такой вопрос покажется не самым умным, но меня он занимает и тормозит уже длительное время. Так-что буду очень признателен за любой дельный совет.