Ich implementiere eine SplPriorityQueue innerhalb dieser Klasse. Die Klasse enthält Methoden, um PDOStatement-Objekte im Wesentlichen mit der richtigen Priorität zu versehen. Ich habe dann eine Methode, die alle PDOStorement-Objekte in der Warteschlange ausführt.Kann nicht aus einem leeren Heap extrahieren
Beim Testen dieser Klasse habe ich ein PDOStatement-Objekt in die Warteschlange geschoben und dann drucke ich die Ergebnisse von $this->queries_to_run->extract()
. Auf diese Weise bekomme ich mein erwartetes Ergebnis, aber auch eine RuntimeExeption
mit der Nachricht "Kann nicht aus einem leeren Haufen extrahieren." Ich bin mir bewusst, dass die SplPriorityQueue im Wesentlichen ein Haufen unter der Haube ist, aber ich weiß nicht, warum ich sowohl mein erwartetes Ergebnis als auch die Ausnahme bekomme. Hier
ist die Teilmenge des lästigen PHP-Code (Ich habe die Extrakt-Flags auf ‚beide‘ bei der Initialisierung der Priorityqueue):
$top = $this->queries_to_run->top();
//print_r($top); // Debug
while($top['priority'] === self::$UPDATE_PRIORITY || $top['priority'] === self::$REMOVAL_PRIORITY) {
print("This is the extracted node\n"); // Debug
print_r($this->queries_to_run->extract()); // Debug
}
Das ist meine Ausgabe lautet:
Dies ist extrahierter Knoten Array ([Daten] => PDOStatement Objekt ([queryString] => [--omited--]) [Priorität] => 4) Dies ist der extrahierte Knoten
Fataler Fehler: Uncaught Ausnahme 'RuntimeException' mit der Nachricht 'Kann nicht aus einem leeren extrahieren Heap 'in ... on line 943
Ich hoffe, ich habe genug Informationen zur Verfügung gestellt. Ich bin ein Student, also hoffe ich, dass dieses Problem nicht sehr offensichtlich ist
ich glaube, Sie '$ top' statt' $ this-> queries_to_run-> extract() ' –
verwenden müssen, würde ich außer ich brauche, um tatsächlich die Abfrage aus dem entfernen Warteschlange und 'top()' guckt einfach auf die Warteschlange. – daniel1171