/** * Gibt nur die Interfaces der Klasse zurück * * @TODO fixme: interfaces die subinterfaces von interfaces sind die wir schon hinzugefügt haben, dürfen auch nicht rein * @return GClass[] */ public function getInterfaces() { /* das hier ist etwas mehr tricky, als bei property und method weil interfaces auch in reflection eine reflectionClass sind und deshalb keine getDeclaringClass() Methode haben deshalb gucken wir ob parent das Interface implementiert. Wenn ja tun wir so als wäre dies nicht unser eigenes implements dies hilft beim Klasse-Schreiben jedoch nicht. Dort würde das Interface dann immer wieder verschwinden, auch wenn es explizit hinzugefügt worden wäre das ist nicht so trivial: InterfaceC extends InterfaceA, InterfaceB dann dürfen InterfacA und InterfaceB nicht implementiert werden (nur C) */ if (!isset($this->parentClass)) { return $this->interfaces; } $interfaces = array(); foreach ($this->interfaces as $interface) { if (!$this->parentClass->hasInterface($interface)) { $interfaces[$interface->getFQN()] = $interface; } } return $interfaces; }
public function testHasInterface() { $gClass = new GClass('Psc\\Data\\ArrayCollection'); $gClass->elevateClass(); //foreach ($gClass->getInterfaces() as $if) { //print $if->getFQN()."\n"; //} $this->assertTrue($gClass->hasInterface(new GClass('Doctrine\\Common\\Collections\\Collection'))); }