Esempio n. 1
0
 /**
  * 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;
 }
Esempio n. 2
0
 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')));
 }