Я создаю базовую структуру в 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'];
На самом деле нет никакой разницы между глобальной переменной и public static
переменной. Переменная класса – это имена, которые немного лучше, но это вряд ли имеет значение. Оба доступны в любом месте в любое время, и оба являются глобальными.
Как бы то ни было, я только что написал исчерпывающую статью по этому вопросу:
Как не убить вашу тестовую способность, используя статику
Итак, мой вопрос: что было бы лучше и почему?
Вы уже чувствуете, что есть некоторая проблема, помещая все это в глобальные. Хотя вы разработали некоторые мысли, чтобы инкапсулировать вещи в класс.
Я думаю, что это хорошая отправная точка. Давайте добавим еще немного специй к кулинарии, чтобы сделать это более свободно в начале:
$data = new ArrayObject(array()); $data['page_title'] = 'Home';
Теперь вы создали объект, который вы можете передать вместе с вашими данными. Просто передайте $data
в область, где это необходимо. Глобальной или глобальной статической переменной не требуется.
Вы даже можете сделать этот тип более конкретным позже, ArrayObject
из ArrayObject
своим типом.