我正在此类中实现SplPriorityQueue。该类包含基本上将PDOStatement对象与正确优先级一起放置的方法。然后我有一个方法来执行队列中的所有PDOStatement对象。无法从空堆中提取
测试此类时,我已将一个PDOStatement对象插入队列,然后打印出$this->queries_to_run->extract()
的结果。在这样做的时候,我得到了我的预期结果,但也是一个RuntimeExeption
与消息“不能从一个空的堆中提取”。我知道SplPriorityQueue本质上是一个堆,但我不知道为什么我得到了我的预期结果和异常。
这里是麻烦的PHP代码的子集(我有提取标志设置为“两个”在时Queue的初始化):
$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
}
这是我的输出:
这是提取的节点 数组([data] => PDOStatement对象([queryString] => [--omitted--])[priority] => 4)这是提取的节点
致命错误:Uncaught exception'RuntimeException'与消息'不能从空的提取堆...在线943
我希望我已经提供了足够的信息。我是一名学生,所以我希望这个问题不是非常明显
我认为你需要使用'$ top',而不是'$这个 - > queries_to_run->提取物()' –
我想除了我需要真正删除从查询队列和'top()'只是在队列中窥视。 – daniel1171