Bir dizi nesne yapıyorum. Belirli bir nesnenin yalnızca bir örneğini içermek için bu diziye ihtiyacım var, aynı nesneye birden fazla başvuru olması bir istisna atmalıdır. Bunu başarmak için aşağıdaki kodu kullanıyorum:in_array Dairesel referanslara sahip nesneler üzerinde
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);
}
Bu benim Düğüm arabirimini uygulamak nesneleri uygulamaya başladığı sorunlara yol açan başladı, bunlar dairesel referanslar içerebilir olarak (onların alt düğümleri bir koleksiyon tutun Her çocuğun ebeveynine referans göstererek). aşağıdaki hatayı neden olabilen bir alanı eklemek için çalışılıyor üretiliyor:
PHP Fatal error: Nesting level too deep - recursive dependency?
PHP tüm nesne dizide bilinçli çalışarak yerine sadece onlar aynı değeri tutmak olmadığını görmek için nesne referanslarını karşılaştıran ve şüpheleniyorsanız bu nedenle aynı nesneyi işaret eder.
Yapmak için in_array 'e ihtiyaç duyduğum şey, yalnızca başvurduğu nesne referanslarını alanın nesne referansı ile karşılaştırmaktır. Bu, tüm nesne ağacını çaprazlamaya ve özyineleme soruna girmeye çalışmasını engeller.
Bunu yapmanın bir yolu var mı?
Amaçlarınız için daha uygun bir eşitlik denetimi yöntemi uygulamak için nesnenize '__equals' geçersiz kılmayı deneyin. –