Php 5.6 downgrade class

I founded a class for a stack of objects and closures, but my server is not running php 5.6 yet. And I was wondering how I can convert ...$parameters , because I can’t fix it by replacing everything with call_user_func_array() , then the buildCoreClosure() method will cause errors, for example, because closing is not an array ...

 class Stack { /** * Method to call on the decoracted class. * * @var string */ protected $method; /** * Container. */ protected $container; /** * Middleware layers. * * @var array */ protected $layers = []; public function __construct(Container $container = null, $method = null) { $this->container = $container ?: new Container; $this->method = $method ?: 'handle'; } public function addLayer($class, $inner = true) { return $inner ? array_unshift($this->layers, $class) : array_push($this->layers, $class); } public function addInnerLayer($class) { return $this->addLayer($class); } public function addOuterLayer($class) { return $this->addLayer($class, false); } protected function buildCoreClosure($object) { return function(...$arguments) use ($object) { $callable = $object instanceof Closure ? $object : [$object, $this->method]; return $callable(...$arguments); }; } protected function buildLayerClosure($layer, Closure $next) { return function(...$arguments) use ($layer, $next) { return $layer->execute(...array_merge($arguments, [$next])); }; } public function peel($object, array $parameters = []) { $next = $this->buildCoreClosure($object); foreach($this->layers as $layer) { $layer = $this->container->get($layer); $next = $this->buildLayerClosure($layer, $next); } return $next(...$parameters); } } 
+6
source share
2 answers

Deleting

 ...$arguments 

in the argument list of each function and replacing it with the following (at the beginning of the function)

 $arguments = func_get_args(); 

You can achieve the same value for the arguments. Arguments will still be passed to func_get_args (), even if they are not defined in the argument list of the function.

+4
source

The fix is ​​to replace ...$arguments with func_get_args()

0
source

All Articles