/** * @param $obj * @param $method * @param $params * @return mixed */ protected function injectLanguageIntoMethodParameters(Language $language, $obj, $method, $params) { $position_of_language_parameter = Utilities::getPositionsOfParameterWithTypeHint($obj, $method, 'JK\\RestServer\\Language'); if (count($position_of_language_parameter) > 0) { foreach ($position_of_language_parameter as $var_name => $position) { $params[$var_name] = $language; if (isset($params[$position])) { unset($params[$position]); } } return $params; } return $params; }
public function testGetPositionsOfParameterWithTypeHint() { $test_class = new TestClass(); $result = Utilities::getPositionsOfParameterWithTypeHint($test_class, 'method', 'stdClass'); $this->assertInternalType('array', $result); $this->assertArrayHasKey('param2', $result); $this->assertEquals(1, $result['param2']); }
/** * @param object $obj Class object * @param string $method Class method * @param string $type_hint_class Class name of the type hint * @return array Position of parameters of type $type_hint_class */ public static function getPositionsOfParameterWithTypeHint($obj, $method, $type_hint_class) { $reflection_class = Utilities::reflectionClassFromObjectOrClass($obj); $reflection_method = $reflection_class->getMethod($method); $reflection_parameters = $reflection_method->getParameters(); $positions = array(); /** @var ReflectionParameter $parameter */ foreach ($reflection_parameters as $parameter) { $type_hint = ''; if (isset($parameter->getClass()->name)) { $type_hint = $parameter->getClass()->name; } if ($type_hint == $type_hint_class) { $positions[$parameter->name] = $parameter->getPosition(); } } return $positions; }