/**
  *
  * @param PHPClass $class
  * @param Schema $schema
  * @param Element $element
  * @param boolean $arrayize
  * @return \GoetasWebservices\Xsd\XsdToPhp\Structure\PHPProperty
  */
 private function visitElement(PHPClass $class, Schema $schema, ElementSingle $element, $arrayize = true)
 {
     $property = new PHPProperty();
     $property->setName($this->getNamingStrategy()->getPropertyName($element));
     $property->setDoc($element->getDoc());
     $t = $element->getType();
     if ($arrayize) {
         if ($itemOfArray = $this->isArrayType($t)) {
             if (!$itemOfArray->getName()) {
                 $classType = $this->visitTypeAnonymous($itemOfArray, $element->getName(), $class);
             } else {
                 $classType = $this->visitType($itemOfArray);
             }
             $arg = new PHPArg($this->getNamingStrategy()->getPropertyName($element));
             $arg->setType($classType);
             $property->setType(new PHPClassOf($arg));
             return $property;
         } elseif ($itemOfArray = $this->isArrayNestedElement($t)) {
             if (!$t->getName()) {
                 $classType = $this->visitTypeAnonymous($t, $element->getName(), $class);
             } else {
                 $classType = $this->visitType($t);
             }
             $elementProp = $this->visitElement($classType, $schema, $itemOfArray, false);
             $property->setType(new PHPClassOf($elementProp));
             return $property;
         } elseif ($this->isArrayElement($element)) {
             $arg = new PHPArg($this->getNamingStrategy()->getPropertyName($element));
             $arg->setType($this->findPHPClass($class, $element));
             $arg->setDefault('array()');
             $property->setType(new PHPClassOf($arg));
             return $property;
         }
     }
     $property->setType($this->findPHPClass($class, $element, true));
     return $property;
 }