Как создать глобальную переменную в CodeIgniter? - PullRequest
0 голосов
/ 27 марта 2020

Сценарий: У меня есть файл JSON, который содержит около 4000 пар ключ-значение в объекте. В вспомогательной функции CodeIgniter я получаю содержимое этого файла, использую json_decode() для преобразования содержимого в PHP Object и возврата Object.

Фрагмент кода

function get_characters()
{
    $json_url = base_url('keywords.json'); // path to JSON file
    $json_data = file_get_contents($json_url); // put the contents of the file into a variable
    return json_decode($json_data); // decode and return the JSON content
}

Вопрос 1: Будет ли вызов этой функции снова и снова снижать производительность, поскольку файл JSON читается при каждом вызове функции?

Вопрос 2: Если это снижает производительность, как я могу сохранить выходные данные этой функции один раз в глобальной переменной, чтобы использовать ее в своем приложении? Или есть лучшее решение?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Вы должны включить свой фрагмент кода в вопрос. Не беспокойся, у меня есть для тебя ответ. Я надеюсь, что это может помочь вам сделать работу.

Ответ 1: Очевидно.

Ответ 2: Конечно, есть много способов сделать это. Вы должны назначить вывод для суперглобальной переменной CI следующим образом:

//Your helper function may look like..
if (!function_exists('load_my_json_file'))
{
    function load_my_json_file()
    {
        $my_json = file_get_contents('./my_json.json');
        $my_json_obj = json_decode($my_json);

        //Grab the CodeIgniter native resource
        $CI = & get_instance();
        $CI->my_json_obj = $my_json_obj;
        return true;
    }

}

Теперь вы сможете получить доступ к вашему json объекту, вызвав $this->my_json_obj из контроллера, модели или представления.

Ниже приведен пример вызова вспомогательной функции:

//app/core/MY_Controller.php
class MY_Controller extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();
        //Load your helper
        $this->load->helper('common');
        //Call the json loader function
        load_my_json_file();
    }

}
//controllers/Welcome.php
class Welcome extends MY_Controller
{

    public function index()
    {
        var_dump($this->my_json_obj);
        exit();
        $this->load->view('welcome_message');
    }
}
0 голосов
/ 27 марта 2020
  1. Вероятно
  2. Вы не можете на самом деле. PHP не сохраняет данные между запросами (даже данные сеанса хранятся в файлах)

Возможно, лучшим решением будет использование СУБД вместо JSON файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...