/**
  * @param PhpProperty $a
  * @param PhpProperty $b
  */
 public function compare($a, $b)
 {
     if (($aV = $a->getVisibility()) !== ($bV = $b->getVisibility())) {
         $aV = 'public' === $aV ? 3 : ('protected' === $aV ? 2 : 1);
         $bV = 'public' === $bV ? 3 : ('protected' === $bV ? 2 : 1);
         return $aV > $bV ? -1 : 1;
     }
     return strcasecmp($a->getName(), $b->getName());
 }
 public function visitProperty(PhpProperty $property)
 {
     $this->visitDocblock($property->getDocblock());
     $this->writer->write($property->getVisibility() . ' ' . ($property->isStatic() ? 'static ' : '') . '$' . $property->getName());
     if ($property->hasDefaultValue()) {
         $this->writer->write(' = ' . $this->getPhpExport($property->getDefaultValue()));
     }
     $this->writer->writeln(';');
 }
 public function setProperty(PhpProperty $property)
 {
     $property->setParent($this);
     $this->properties[$property->getName()] = $property;
     return $this;
 }