Để lớp của bạn hoạt động tĩnh, bạn cần thực hiện một số điều.
Đầu tiên, đặt kết nối tĩnh, ví dụ:
private static $connection;
Thứ hai, tại sao tất cả các dấu gạch dưới?
define('DB_HOST', 'localhost');
define('DB_NAME', 'your_db_name');
define('DB_USER', 'username');
define('DB_PASS', 'password');
Ngoài ra, tại sao lại sử dụng hằng số lớp? Chỉ cần sử dụng các hằng số bạn đã xác định.
Thứ ba, mất constructor. Bạn không thể mong đợi tạo một phiên bản của lớp này và sử dụng nó một cách tĩnh. Tôi sẽ sử dụng phương pháp tải chậm cho kết nối
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;
}
Sau đó, các phương thức công khai của bạn sẽ gọi phương thức này trong nội bộ. Tôi cũng sẽ xác thực dbDataArray
của bạn để chỉ cho bạn cách trả về một mảng liên kết
public static function dbDataArray($query, $params = array()) {
$stmt = self::getConnection()->prepare($query);
$stmt->execute($params);
return $stmt->fetchAll();
}