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