我正在尝试在 php 中创建一个循环链表,这非常简单,因为 php 对象是引用。这意味着 php 对象的行为应该类似于 c++ 指针。以下是链表的简化实现:
class Node{
public $next;
}
$node1 = new Node();
$node2 = new Node();
$node1->next = $node2;
$node2->next = $node1;
在实现这个之后,我意识到当你在一个循环列表中链接你的对象时,疯狂的事情开始发生了。例如,使用 == 运算符比较这些对象时会出错:
if($node1 == $node2) //Fatal error: Nesting level too deep - recursive dependency?
我发现比较这些对象的正确方法是使用严格比较。
if($node1 === $node2) //Works fine
我认为非严格比较试图比较对象的所有属性。这样做会发现存在无限嵌套,因此会报告错误。但我无法弄清楚为什么以下工作:
if($node1->next == $node2) //Works fine with == rather than ===
结论:
始终使用标识运算符 (===) 来比较对象 - 除非您希望比较具有不同实例的相似对象返回 true,但请注意嵌套问题。