@exgod
Трудно быть Богом.

Как правильно подключится к БД в ООП?

Добрый день. Пишу класс для подключения к БД и дальнейшего вывода информации.
<?php

    class DB{

        protected $connection;

        public function __construct($host, $user, $password, $db_name) {
            $this->connection = new mysqli($host, $user, $password, $db_name);

            if( !$this->connection ) {
                throw new Exception('error');
            }
        }

        public function getAllInformationFromTableUsers() {
            $getAllInformationFromTableUsers = $this->connection->query("SELECT * FROM tableUs");
            $row = $getAllInformationFromTableUsers->fetch_assoc();
            $this->connection->close();
            return $row["id"];
        }

    }

Подскажите, где и как правильно объявить переменные $host, $user, $password, $db_name. Дело в том, что при объявлении их следующим образом:
<?php

    class DB{

        public $host = "localhost";
        public $user = "example";
        public $password = "12345678";
        public $db_name = "exampledb";

        protected $connection;

        public function __construct($host, $user, $password, $db_name) {
            $this->connection = new mysqli($host, $user, $password, $db_name);

            if( !$this->connection ) {
                throw new Exception('error');
            }
        }

    }

выскакивает ошибка Missing argument 1 for DB::__construct()
Не эксперт в ООП, но хотелось бы научится данному стилю написания кода.
  • Вопрос задан
  • 927 просмотров
Решения вопроса 1
@ipokos
Пишу класс для подключения к БД и дальнейшего вывода информации.

Это отлично, но хотел бы предложить для начала освоить синтаксис ООП, т.к. должно быть хотя бы базовое понимание, а после этого написать простой класс, понять что такое объект, как обращаться к его методам, как работать с несколькими объектами, как и для чего разделять область видимости методов и свойств, а только потом уже писать что то более сложное (подключение к БД)

выскакивает ошибка Missing argument 1 for DB::__construct()

Обращения к свойствам текущего объекта, происходит так:
$this->host // обращение к $host
$this->user // обращение к $user
...

т.е. в вашем примере кода, можно сделать так
public function __construct() {
            $this->connection = new mysqli($this->host, $this->user, $this->password, $this->db_name);

            if( !$this->connection ) {
                throw new Exception('error');
            }
        }


ну и само собой что конфиги для подключения к БД делать public.. скажем не нужно.
Область видимости свойств (переменных)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@vaajnur
битриксоид
задай дефолтные значения для подключения.
Ответ написан
profesor08
@profesor08 Куратор тега PHP
Ошибка в том, что у тебя конструктор с параметрами, а ты инициализируешь объект класса DB без параметров.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы