개체 배열을 만들고 있습니다. 주어진 객체의 한 번만 인스턴스를 포함하도록이 배열이 필요합니다. 동일한 객체에 대한 여러 참조가 예외를 throw해야합니다. 나는 이것을 달성하기 위해 다음 코드를 사용하고 있습니다 :순환 참조가있는 객체의 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'를 재정의하여보다 적합한 평등 검사 방법을 구현하십시오. –