Здравствуйте мастера. Вот пытаюсь перейти на пдо, и ооп, но пока что попытки тщетны(Подскажите пожалуйста, что тут не так? Мой класс подключения к бд PHP: class DB { private $dsn; private $opt = array(); static public $pdo; function __construct() { $this->dsn = "mysql:host=".DB_SERVER.";dbname=".DB_NAME.";charset='UTF8'"; $this->opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); self::$pdo = new PDO($this->dsn, DB_USER, DB_PASS, $this->opt); } } А вот сам файл, где пытаюсь сделать запрос: PHP: <?php include '../includes/db_connects.php'; DB::$pdo->query("SELECT COUNT(id) FROM `users`")->fetchColumn(); ?> Но получаю ошибку: "Fatal error: Call to a member function query() on a non-object in C:\OpenServer\domains\oop\public\index.php on line 8" Помогите пожалуйста(
PHP: include 'config.php'; Вот так работает: class DB { private $dsn; private $opt = array(); private $pdo; function db_connect() { $this->dsn = "mysql:host=".DB_SERVER.";dbname=".DB_NAME.";charset='UTF8'"; $this->opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); return $this->pdo = new PDO($this->dsn, DB_USER, DB_PASS, $this->opt); } } потом просто создаю объект с подключением к бд отдельно, так нормально? Или можно, в __construct() запихнуть вызов метода db_connect (не получилось так)
В первом случае вы используете статическую переменную для хранения подключения, но само подключение происходит при инициализации объекта, которую вы не делаете. Что происходит во втором случае я не знаю.
Во втором случае, просто создаю объект с подключением. $connect = new DB(); $db = $connect->db_connect();
Первый случай - жесть. Вы не разобрались, что такое конструкторы, статические поля, не статические поля. Во-втором - ну можно и в конструктор, да
ну конструктор, это метод, который выполняется сразу же после инициализации объекта. Статический метод - метод, который можно вызывать без создания экземпляра класса, это я понял. Не совсем пока ясно, что куда рационально применять, но всё же, начинаю вникать