我正在構建一個對象數組。我需要這個數組只包含一個給定對象的實例,對同一個對象的多個引用應該引發異常。我使用下面的代碼來實現這一目標:in_array帶有循環引用的對象
public function addField ($name, iface\Node $field)
{
// Prevent the same field being added multiple times
if (!in_array ($field, $this -> fields))
{
$this -> fields [$name] = $field;
$field -> setParent ($this);
}
else
{
throw new \InvalidArgumentException ('This field cannot be added to this group');
}
return ($this);
}
這開始導致問題,當我開始實施實現Node接口的對象,因爲它們可以包括循環引用(他們持有其子節點的集合,每個孩子持有對其父母的引用)。嘗試添加一個字段可能會導致以下錯誤正在生成:
PHP Fatal error: Nesting level too deep - recursive dependency?
我懷疑PHP試圖遍歷整個對象數組,而不是僅僅比較對象引用,看看他們是否持有相同的值,因此指向同一個對象。
我需要in_array做的只是比較它存儲的對象引用和字段的對象引用。這將阻止它試圖遍歷整個對象樹並且遇到遞歸問題。
有沒有辦法做到這一點?
試着在你的對象上覆蓋'__equals'來實現一個更適合你的目的的平等檢查方法。 –