$GLOBALS['current_view']
и global $current_view
, которые вы предпочитаете и почему?Методы доступа к глобальным переменным PHP
ответ
Не передавайте параметры в методы. Каждый раз, когда вы используете глобалы, Бог убивает котенка.
Если я должен использовать глобальные переменные, и я избегаю их, как чуму, я использую глобальный $ current_view. Я просто предпочитаю всегда иметь локальную переменную, а не полагаться на супер-глобальные. Но я думаю, что это вопрос предпочтения.
Лично я предпочитаю синтаксис $GLOBALS['glob']
, потому что я могу просто скопировать вставку кода, не беспокоясь о объявлении переменных как глобальных. Имейте в виду, что вы должны попытаться свести глобальные значения к минимуму (возможно, только глобальные директивы конфигурации и даже там ...).
Однако эти два метода не являются однозначными; есть небольшая разница:
function func() {
var_dump($GLOBALS['glob']);
}
function func2() {
global $glob;
var_dump($glob);
}
Первый будет выдавать уведомление, если глобальные «Глобо» не существует. Второй - нет.
В первом случае, отправка $GLOBALS['glob']
в качестве аргумента компилирует:
3 FETCH_R global $0 'GLOBALS'
4 FETCH_DIM_R $1 $0, 'glob'
Вы выборки GLOBALS
и его индекс glob
в контексте чтения; переменная не создается.
Второй компилирует
compiled vars: !0 = $glob
...
2 FETCH_W global lock $0 'glob'
3 ASSIGN_REF !0, $0
Вы создаете ссылку на глобальный glob
, поэтому он неявно создается, если она не существует.
также:
function func_unset() {
unset($GLOBALS['glob']);
}
function func2_unset() {
global $glob;
unset($glob);
}
Функция func()
фактически снята с охраны глобального, func2_unset
будет просто уничтожить ссылку, которая была создана.
Обратите внимание, что func2
очень похож:
function func3() {
$glob =& $GLOBALS['glob'];
}
Это один, однако потенциально менее эффективным. Он компилирует
2 FETCH_W global $0 'GLOBALS'
3 FETCH_DIM_W $1 $0, 'glob'
4 ASSIGN_REF !0, $1
статических классов FTW
class View {
private static $current = null;
public static function get_current() {
return self::$current;
}
}
Я думаю, вы должны спросить * что лучше практика * в отличие от того, что люди относятся (несмотря на то, что они могли бы быть то же самое). – alex
@alex Есть небольшие отличия. – Artefacto
@Artefacto Да, но я бы предпочел использовать код для лучшей практики, чем то, что кто-то в Интернете * предпочитает *. – alex