PHP — Передача параметров на всех глубоких уровнях функции обратного вызова

#php #laravel #laravel-excel

#php #laravel #laravel-excel

Вопрос:

Я использую Laravel-библиотеку Excel для разработки функции экспорта xls.
Мне нужно добавить значение в определенную ячейку. В качестве документации я написал скрипт

 $data = MyModel::getComplexData();

Excel::create('Export payroll', function($excel) use ($data) {

    $excel->sheet('Sheet1', function($sheet) use ($data) {
        $sheet->cell('A1', function ($cell) use ($data) {
            $cell->setValue($data->name);
        });
    });

})->download('xls');
  

Вы можете видеть, что параметр $data был передан 3 раза по 3 функциям обратного вызова.
Мне нужно найти способ сделать скрипт более понятным (передать $data только 1 раз).

Комментарии:

1. Я не вижу другого решения, поскольку, если вы используете только один раз, переменная $data будет неопределенной

2. На самом деле это более понятно. Будущий разработчик будет точно знать, откуда берется $data . Альтернативой является использование $GLOBALS переменной, но я не буду рекомендовать.

Ответ №1:

У меня есть идея взглянуть на приведенный ниже код. мы можем установить в переменной члена.

 <?php
class Test(){

    private $data = "Hellow";
    public function funct(){
        $data = MyModel::getComplexData();
        $this->data = $data;

        Excel::create('Export payroll', function($excel){

            $excel->sheet('Sheet1', function($sheet){
                $sheet->cell('A1', function ($cell){
                    $cell->setValue($this->data->name);
                });
            });

        })->download('xls');
    }
}

?>