我正在实现一个BinaryHeap
类,该类应该采用一个$type
参数来确定堆是最大堆还是最小堆。
这是构造函数的样子:
public function __construct ($type = 'max') {
if (strtolower($type) == 'max') {
$this->shouldSwap = array($this, 'maxHeap');
} else if (strtolower($type) == 'min') {
$this->shouldSwap = array($this, 'minHeap');
} else {
throw new Exception("Unsupported type. Supported types include 'min' and 'max'");
}
}
minHeap
和maxHeap
是同一类的两个函数:
private function minHeap ($item1, $item2) {
return $this->heap[$item2] < $this->heap[$item1];
}
private function maxHeap ($item1, $item2) {
return $this->heap[$item2] > $this->heap[$item1];
}
这个想法是能够在我的其他方法中使用$this->shouldSwap
,而不必担心minHeap
或maxHeap
的逻辑。
这给我一个错误:
Error: Call to undefined method BinaryHeap::shouldSwap()
我尝试使用:
$this->shouldSwap = '$this->minHeap';
但似乎没有任何改变。在我看来,它不了解私有变量$shouldSwap
现在已分配给一个函数。
我做错什么了吗?用PHP实现我想要的东西的正确方法是什么?