У меня есть вопрос об инициализации глобальной переменной.
function hello_testing() {
global $conditional_random;
if (isset($conditional_random)) {
echo "foo is inside";
}
}
Глобальная переменная (conditional_random) не может быть инициализирована перед hello_testing()
функция вызвана.
Так, что происходит с моей проверкой через isset()
когда $conditional_random
не инициализируется? Это перестанет работать, или это всегда будет верно?
А почему бы вам просто не проверить? ; -)
Примечание: Не так просто, как вы думаете - прочтите полный ответ; -)
Вызов функции hello_testing ();
без установки переменной:
hello_testing();
Я не получаю вывода - это означает, что isset
вернул false
.
Вызов функции после установки переменной:
$conditional_random = 'blah';
hello_testing();
Я получаю вывод:
foo is inside
Это означает, что global
работает должным образом, когда переменная установлена - ну, нужно не сомневайтесь ^^
НО обратите внимание, что isset
вернет false
, если переменная установлена, и null
!
См. Страницу руководства для isset ()
. Это означает, что лучшим тестом будет:
function hello_testing() {
global $conditional_random;
var_dump($conditional_random);
}
hello_testing();
И это отображает:
null
No Notice: переменная существует! Даже если null
.
Поскольку я не устанавливал переменную вне функции, это показывает, что global
устанавливает переменную, но не помещает в нее значение; это означает, что он ноль
, если он еще не установлен вне функции.
В то время как:
function hello_testing() {
//global $conditional_random;
var_dump($conditional_random);
}
hello_testing();
Дает:
Notice: Undefined variable: conditional_random
Доказывает, что уведомления разрешены; -)
И, если бы global не « установил » переменную, предыдущий пример дал бы такое же уведомление.
И, наконец:
function hello_testing() {
global $conditional_random;
var_dump($conditional_random);
}
$conditional_random = 'glop';
hello_testing();
Дает:
string 'glop' (length=4)
(Чисто для демонстрации моего примера не обманывают ^^)
Глобальный
устанавливает переменную. Поэтому isset ($ some_globald_variable)
всегда будет возвращать истину.
Лучшим вариантом является empty ()
if(empty($globald_variable))
{
// variable not set
}