Damit Ihre Klasse statisch funktioniert, müssen Sie einige Dinge tun.
Machen Sie zuerst die Verbindung statisch, zB
private static $connection;
Zweitens, warum all die Unterstriche?
define('DB_HOST', 'localhost');
define('DB_NAME', 'your_db_name');
define('DB_USER', 'username');
define('DB_PASS', 'password');
Warum überhaupt Klassenkonstanten verwenden? Verwenden Sie einfach die Konstanten, die Sie bereits definiert haben.
Drittens, verlieren Sie den Konstruktor. Sie können nicht erwarten, eine Instanz dieser Klasse and zu erstellen benutze es statisch. Ich würde für die Verbindung einen Lazy-Load-Ansatz wählen
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;
}
Dann würden Ihre öffentlichen Methoden diese Methode intern aufrufen. Ich werde auch Ihr dbDataArray
konkretisieren -Methode, um Ihnen zu zeigen, wie Sie ein assoziatives Array
public static function dbDataArray($query, $params = array()) {
$stmt = self::getConnection()->prepare($query);
$stmt->execute($params);
return $stmt->fetchAll();
}