Глобальные и статические переменные в PHP

Я создаю базовую структуру в PHP. Мне нужно передать данные для текущей страницы в разные функции, позволить им изменять и сохранять ее, а затем передавать обратно на страницу, которая будет отображаться. Первоначально планировалось хранить данные в глобальной переменной, такой как $GLOBALS['data'] , но я начинаю думать, что использование глобальной – плохая идея. Поэтому я думаю, что вместо этого ставим переменную static в системном классе и получаю доступ к ней с помощью system::$data . Итак, мой вопрос: что было бы лучше и почему?

Эта:

 $GLOBALS['data'] = array(); $GLOBALS['data']['page_title'] = 'Home'; echo $GLOBALS['data']['page_title']; 

Или это:

 class system { public static $data = array() } function data($new_var) { system::$data = array_merge(system::$data, $new_var); } data(array('page_title' => 'Home')); echo system::$data['page_title']; 

Related of "Глобальные и статические переменные в PHP"

На самом деле нет никакой разницы между глобальной переменной и public static переменной. Переменная класса – это имена, которые немного лучше, но это вряд ли имеет значение. Оба доступны в любом месте в любое время, и оба являются глобальными.

Как бы то ни было, я только что написал исчерпывающую статью по этому вопросу:
Как не убить вашу тестовую способность, используя статику

Итак, мой вопрос: что было бы лучше и почему?

Вы уже чувствуете, что есть некоторая проблема, помещая все это в глобальные. Хотя вы разработали некоторые мысли, чтобы инкапсулировать вещи в класс.

Я думаю, что это хорошая отправная точка. Давайте добавим еще немного специй к кулинарии, чтобы сделать это более свободно в начале:

 $data = new ArrayObject(array()); $data['page_title'] = 'Home'; 

Теперь вы создали объект, который вы можете передать вместе с вашими данными. Просто передайте $data в область, где это необходимо. Глобальной или глобальной статической переменной не требуется.

Вы даже можете сделать этот тип более конкретным позже, ArrayObject из ArrayObject своим типом.