For at din klasse kan fungere statisk, skal du gøre et par ting.
Først skal du gøre forbindelsen statisk, f.eks.
private static $connection;
For det andet, hvorfor alle de understregninger?
define('DB_HOST', 'localhost');
define('DB_NAME', 'your_db_name');
define('DB_USER', 'username');
define('DB_PASS', 'password');
Og hvorfor overhovedet bruge klassekonstanter? Brug blot de konstanter, du allerede har defineret.
For det tredje mister du konstruktøren. Du kan ikke forvente at oprette en forekomst af denne klasse og bruge det statisk. Jeg ville gå efter en lazy-load tilgang til forbindelsen
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;
}
Så ville dine offentlige metoder kalde denne metode internt. Jeg vil også udfylde din dbDataArray
metode til at vise dig, hvordan du returnerer et associativt array
public static function dbDataArray($query, $params = array()) {
$stmt = self::getConnection()->prepare($query);
$stmt->execute($params);
return $stmt->fetchAll();
}