Хобрук: Ваш путь к мастерству в программировании

Понизить класс php 5.6 до 5.5

Я создал класс для стека слоев и замыканий объектов, но мой сервер еще не работает на php 5.6. И мне было интересно, как я могу преобразовать ...$parameters, потому что я не могу это исправить, заменив все на call_user_func_array(), тогда метод buildCoreClosure() выдаст ошибки, например, потому что замыкание не является массивом...

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);
    }
}
01.07.2015

  • Крутой вопрос. Раньше я использовал массивы параметров в этом случае, чтобы не перечислять их все. 02.07.2015

Ответы:


1

Удалив

...$arguments

в списке аргументов каждой функции и заменив его следующим (в начале функции)

$arguments = func_get_args();

Вы можете добиться того же значения аргументов. Аргументы по-прежнему будут передаваться функции func_get_args(), даже если они не определены в списке аргументов функции.

02.07.2015

2

Исправление заключается в замене ...$arguments на func_get_args()

02.07.2015
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..