/** * Creates a new object of the given type, using the optional parameters. * When pseudo-namespace support is enabled class names can become very long, * and this function provides an alternative way to create objects that is * more readable. * @param string $type the type of object to create * @param array $params parameters to pass into the constructor, as either * flat array in the correct order for the constructor or as an * associative array from parameter name to value * @return mixed a new instance of a class that represents that type */ public function Create($type, $params = null) { if (array_key_exists($type, $this->options['classmap'])) { $class = $this->options['classmap'][$type]; $reflectionClass = new ReflectionClass($class); if (isset($params)) { if (MapUtils::IsMap($params)) { $params = MapUtils::MapToMethodParameters($params, $reflectionClass->getConstructor()); } return $reflectionClass->newInstanceArgs($params); } else { return $reflectionClass->newInstance(); } } else { trigger_error('Unknown type: ' . $type, E_USER_ERROR); } }