För att din klass ska fungera statiskt måste du göra några saker.
Gör först anslutningen statisk, t.ex.
private static $connection;
För det andra, varför alla understreck?
define('DB_HOST', 'localhost');
define('DB_NAME', 'your_db_name');
define('DB_USER', 'username');
define('DB_PASS', 'password');
Dessutom, varför använda klasskonstanter överhuvudtaget? Använd bara de konstanter du redan har definierat.
För det tredje, förlora konstruktören. Du kan inte förvänta dig att skapa en instans av den här klassen och använd den statiskt. Jag skulle välja en lat-belastningsmetod för anslutningen
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;
}
Sedan skulle dina offentliga metoder anropa denna metod internt. Jag kommer också att utveckla din dbDataArray
metod för att visa hur du returnerar en associativ array
public static function dbDataArray($query, $params = array()) {
$stmt = self::getConnection()->prepare($query);
$stmt->execute($params);
return $stmt->fetchAll();
}