이 클래스 내에서 SplPriorityQueue를 구현 중입니다. 이 클래스에는 본질적으로 PDOStatement 객체를 올바른 우선 순위와 함께 넣는 메소드가 포함되어 있습니다. 그런 다음 큐에있는 모든 PDOStatement 객체를 실행하는 메소드가 있습니다.빈 힙에서 추출 할 수 없습니다.
이 클래스를 테스트 할 때 하나의 PDOStatement 객체를 큐에 넣은 다음 $this->queries_to_run->extract()
의 결과를 인쇄합니다. 이 작업을 수행 할 때 예상 결과를 얻었지만 RuntimeExeption
"빈 힙에서 추출 할 수 없습니다."라는 메시지가 나타납니다. 나는 SplPriorityQueue가 근본적으로 후드 아래의 힙이라는 것을 알고 있지만, 왜 내가 예상 결과와 예외를 모두 얻고 있는지 알지 못한다.
이가이다 : 이것은 내 출력
$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
}
: 여기
는 귀찮은 PHP 코드의 부분 집합 (필자는 PriorityQueue 인의 초기화시 추출물 플래그는 '모두'로 설정된)입니다 추출 된 노드 배열 ([data] => PDOStatement 객체 ([queryString] => [--omitted--]) [priority] => 4) 이것은 추출 된 노드입니다치명적인 오류 : 캐치되지 않은 예외 'RuntimeException' '빈에서 추출 할 수 없습니다. heap 'in ... on line 943
충분한 정보를 제공했으면 좋겠다. 나는 학생이므로이 문제가 극히 분명하지 않기를 바란다.
을 당신이'대신'의 $의 top'를 사용할 필요가 있다고 생각 $ this-> queries_to_run-> 추출()' –
나는 실제로에서 쿼리를 제거 할 필요를 제외시켰다 것 대기열 및'top()'는 단순히 대기열을 들여다 봅니다. – daniel1171