Как перезаписать значение ключа $data в Codeigniter 3.1.6

204
15 января 2019, 20:40

В контроллере, в функции index() я создаю массив:

$data['current_list'] = [
        'id_list' => 0,
        'name_list' => "Не выбран список",
        'date_list' => "0000-00-00",
        'prod_list' =>  [
                        'id_product_list' => 1,
                        'name_product_list' => "",
                        'category_product_list' => "",
                        'amount_product_list' => 0,
                        'price_product_list' => 0
                        ]
        ];

Как перезаписать $data['current_list']['name_list'], например, в другой функции этого же контроллера? Например, ниже есть функция:

public function func1(){
    $data['current_list']['name_list'] = "Новый список";
}

Почему $data['current_list']['name_list'] не изменяется?

Answer 1

При подобном написании $data является локальной переменной. Чтобы она была доступна в других функциях вам следует либо передать ее туда как параметр (func1($data)), либо сделать членом класса $this->data.

Я, честно сказать, не знаком с CodeIgniter, но обычно public методы контроллера реализуют какой-то экшен, и редко вызываются друг из друга. С этой точки зрения, хотелось бы убедиться, что вы рассматриваете передачу данных в рамках выполнения одного и того же GET-запроса.

Answer 2

Всё потому что вы вносите изменения в массив находящийся в области видимости функции, Изменения не применяются к массиву вне функции. Есть несколько способов решить эту проблему.

Вариант 1 - Передать функции массив, внести в него изменения и ввернуть результат

    function func1($data){
        $data['current_list']['name_list'] = "Новый список";
        return $data;
    }
    $data = func1($data);

Вариант 2 - Передать функции ссылку на ваш массив

    function func2(&$data){
        $data['current_list']['name_list'] = "Новый список";
    }
    func2($data);

Вариант 3 - использовать ключевое слово global (не рекомендуется)

    function func3(){
        global $data;
        $data['current_list']['name_list'] = "Новый список";
    }
    func3();

Про область видимости можно прочитать в официальной документации PHP

READ ALSO
Цифры 2 и 4 в именах функций

Цифры 2 и 4 в именах функций

Часто встречал у разных разработчиков, в названиях методов использую числа 2 или 4

199
Unistall apache 2.4 + php 7.1

Unistall apache 2.4 + php 7.1

Ребят, нужна помощь, скажите какими командами или как вообще возможно перманентно удалить Apache 24 и PHP 7

191
Помогите с протоколом передачи данных

Помогите с протоколом передачи данных

Имеется на руках teltonik FMB920Настроил его на отправку TCP пакетов на сервер через GPRS

236
Обновление профиля если на это есть права

Обновление профиля если на это есть права

Как правильно реализовать данный функционал?

211