Всем привет! Подскажите такой момент. На сколько плохой практикой является передавать как параметр $link = mysqli_connect($host, $user, $password, $database) в класс.
Что я хочу сделать. Пользователь вводит данные, я должен проверить наличие этих данных в базе, если есть то вернуть другой столбец, соответствующий этим данным. Если нет, то провести операции с этими данными и внести данные в базу.
Что я делаю схематично:
$link = mysqli_connect(...)
class A {
public function __construct($data, $link) {
$this->data = $data;
$this->link = $link;
public function B() {$result = mysqli_query( $this->links , $query)}
}
$Object = new A($data, $link);
$Object->B();
В общем код не правильный, но это просто схема, думаю смысл понятен. У меня все работает. Но на сколько такой подход не правильный?
Тоже, так, очень схематично (solid. начало):
class MysqlConn
{
__construct($host, $my_user, $password, $db)
// тут открываете соединение с бд
}
class Crud
{
__construct(MysqlConn $dbConn)
// тут запросы в бд
}
class UserData
{
__construct(Crud $db)
// тут операции с пользовательскими данными
// и передача подготовленных данных объекту класса Crud
}
$mysqlConn = new MysqlConn($host, $my_user, $password, $db);
$crud = new Crud($mysqlConn);
$userData = new UserData($crud);
// ... somewhere in a code far far away
$userData->crud->saveInput($data);
Т.е. в данном случае мы разделили ответственности между классами, разнесли свойства и методы, решающие принципиально разные задачи, по отдельным классам. В дальнейшем нам не надо будет снова повторять реализацию подключения/работы с бд в других классах, достаточно будет просто вызывать существующие реализации. Далее, мы избавились от зависимости класса-обработчика на пользовательские данные. Получили гибкость - не придётся постоянно создавать новый объект под новую порцию данных.
Это единственно правильный подход.
Продвижение своими сайтами как стратегия роста и независимости