/** * @param ArrayAccess $services * @param CallableReflection $callbackReflection * @return array */ private function prepareArgs(ArrayAccess $services, CallableReflection $callbackReflection) { $args = array('args' => $this->getMatches(), 'services' => $services); foreach ($callbackReflection->getReflector()->getParameters() as $reflectionParameter) { if ($services->offsetExists($reflectionParameter->getName())) { $args[$reflectionParameter->getName()] = $services[$reflectionParameter->getName()]; } } return $args; }
/** * @param callable $filter * @return mixed */ private function callFilter(callable $filter) { $callbackReflection = new CallableReflection($filter); return $callbackReflection->invokeA($this->castServices($callbackReflection->getReflector()->getParameters())); }
public function testGetObjectForInvokedObject() { $reflectedCallable = new CallableReflection($this->getInvokedObject()); $this->assertInstanceOf('TRex\\Reflection\\resources\\Callback', $reflectedCallable->getObject()); }
private function getCallableTypeHints(callable $action) { $reflector = new CallableReflection($action); $method = $reflector->getReflector(); $params = $method->getParameters(); $mapped = []; foreach ($params as $param) { if ($param->getClass() !== null) { $mapped[$param->getName()] = ['name' => $param->getClass()->getName(), 'optional' => $param->isOptional()]; } } return $mapped; }
/** * Executes a callable using dependency injection * * @param callable $call A callable to execute using dependency injection * @param mixed[] $arguments The arguments to pass to the callable * * @return mixed The return value of the callable */ public function call(callable $call, array $arguments = []) { $reflector = new CallableReflection($call); $method = $reflector->getReflector(); $values = $this->buildArguments($method, $arguments); //TODO Workaround for PHP5... if ($reflector->isStaticMethod()) { return $reflector->invokeArgsStatic($values); } return $call(...$values); }