/** * Loads all type classes */ private function loadTypes() { $this->log('Loading types'); $types = $this->wsdl->getTypes(); foreach ($types as $typeNode) { if ($typeNode->isArray()) { // skip arrays continue; } $type = null; if ($typeNode->isComplex()) { $type = new ComplexType($this->config, $typeNode->getName()); $this->log('Loading type ' . $type->getPhpIdentifier()); foreach ($typeNode->getParts() as $name => $typeName) { $type->addMember($typeName, $name, $typeNode->isElementNillable($name)); } } elseif ($enumValues = $typeNode->getEnumerations()) { $type = new Enum($this->config, $typeNode->getName(), $typeNode->getRestriction()); array_walk($enumValues, function ($value) use($type) { $type->addValue($value); }); } elseif ($pattern = $typeNode->getPattern()) { $type = new Pattern($this->config, $typeNode->getName(), $typeNode->getRestriction()); $type->setValue($pattern); } if ($type != null) { $already_registered = false; if ($this->config->getSharedTypes()) { foreach ($this->types as $registered_types) { if ($registered_types->getIdentifier() == $type->getIdentifier()) { $already_registered = true; break; } } } if (!$already_registered) { $this->types[$typeNode->getName()] = $type; } } } // Loop through all types again to setup class inheritance. // We can only do this once all types have been loaded. Otherwise we risk referencing types which have not been // loaded yet. foreach ($types as $type) { if (($baseType = $type->getBase()) && isset($this->types[$baseType])) { $this->types[$type->getName()]->setBaseType($this->types[$baseType]); } } $this->log('Done loading types'); }