За да може вашият клас да работи статично, трябва да направите няколко неща.
Първо, направете връзката статична, напр.
private static $connection;
Второ, защо всички долни черти?
define('DB_HOST', 'localhost');
define('DB_NAME', 'your_db_name');
define('DB_USER', 'username');
define('DB_PASS', 'password');
Също така, защо изобщо да използвате константи на клас? Просто използвайте константите, които вече сте дефинирали.
Трето, губете конструктора. Не можете да очаквате да създадете екземпляр на този клас и използвайте го статично. Бих избрал подход с мързеливо зареждане за връзката
private static function getConnection() {
if (self::$connection === null) {
$dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',
DB_HOST, DB_NAME);
self::$connection = new PDO($dsn, DB_USER, DB_PASS, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
));
}
return self::$connection;
}
След това вашите публични методи ще извикат този метод вътрешно. Ще разясня също така вашия dbDataArray
метод, за да ви покаже как да върнете асоциативен масив
public static function dbDataArray($query, $params = array()) {
$stmt = self::getConnection()->prepare($query);
$stmt->execute($params);
return $stmt->fetchAll();
}