PDO-Objekt leer

Dies ist mein code:

class DB {
static $instance;

function get() {
    if (self::$instance === null) {
        self::$instance = new PDO('mysql:host=localhost;dbname=forum', 'root', 'root');
    }
    return self::$instance;
}

function getAllUsers() {
    $users = array();
    $sql = "SELECT * FROM users";
    foreach (self::get()->query($sql) as $row) {
        $users[] = new User($row);
    }
    return $users;    
}
}

Nun bin ich auf den Aufruf der getAllUsers Funktion hier:

class App {
function showUsers() {
    $users = DB::getAllUsers();
}

Außer die geben mir einen Fehler:

Warnung: Invalid argument für foreach geliefert()

Wenn ich dabei bin var_dump auf self::get im immer eine bool(false)

Kann mir jemand sagen was ich falsch mache?

  • Ich möchte darauf hinweisen, dass var_dump(self::get()) zeigt-Objekt(PDO)#2 (0) { }
  • Warum bist du nicht try/catching und auslösen von Ausnahmen? Sie nicht Ihre Klasse jede route, die ordnungsgemäß fehl hier.
  • Wenn Sie rufen Sie Ihre Instanz der Klasse mit self::get(), dann get() erklärt werden sollte static.
  • Mein Erster Gedanke war, dass der Fehler versteckt war, als ich noch nicht die Datenbank erstellt noch. Aber ich habe es umgeben mit einem try - /catch-und ist es immer noch nicht, dass Sie mir einen PDOException
  • Die Klasse soll statisch sein, ja, im wissen das. Aber aus irgendeinem Grund, es funktioniert immer noch ohne das Schlüsselwort static. Ich bin immer ein pdo-Objekt zurück
  • Haben Sie versucht, php.net/manual/en/pdo.errorinfo.php?
  • Ok, es ist nun behoben, die ich erstellt habe die Tabelle und die Datenbank. Noch ich finde es ziemlich komisch, dass die 1. obwohl die Funktion ist nicht statisch, ich bin immer noch in der Lage, es zu nennen, und 2. auch wenn try/fangen die pdo->query war ich noch nicht immer Fehler. Jedenfalls ist es jetzt behoben
  • Ja, es funktioniert, check out stackoverflow.com/questions/13435405/... und stackoverflow.com/questions/2439036/...
  • Statische Klassenmethoden können aufgerufen werden, solange Sie nicht versuchen, auf etwas, das in einem eigenen instanziierten Objekte. Siehe: codepad.org/BhrBiXPE Es ist immer so. Wenn Sie beabsichtigen, verwenden Sie eine Methode als static, beschriften Sie Sie als statisch, so dass Sie nicht versehentlich übersehen und etwas tun sollte man eigentlich nicht tun.

InformationsquelleAutor Moose Moose | 2012-12-15
Schreibe einen Kommentar