/** * 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); } }
/** * Test converting a map to a set of method parameters. * @param array $map the map of parameter names to values * @param array $expected the expected array of parameter values * @covers MapUtils::MapToMethodParameters * @dataProvider MapToMethodParametersProvider */ public function testMapToMethodParameters(array $map, array $expected) { $reflectionClass = new ReflectionClass($this); $reflectionMethod = $reflectionClass->getMethod('SampleMethod'); $result = MapUtils::MapToMethodParameters($map, $reflectionMethod); $this->assertEquals($expected, $result); }