isset () и Глобальная переменная PHP

У меня есть вопрос об инициализации глобальной переменной.

function hello_testing() {
  global $conditional_random;
  if (isset($conditional_random)) {
      echo "foo is inside";  
  }
}

Глобальная переменная (conditional_random) не может быть инициализирована перед hello_testing() функция вызвана.

Так, что происходит с моей проверкой через isset() когда $conditional_random не инициализируется? Это перестанет работать, или это всегда будет верно?

8
задан Rizier123 14 February 2016 в 10:05
поделиться

2 ответа

А почему бы вам просто не проверить? ; -)

Примечание: Не так просто, как вы думаете - прочтите полный ответ; -)


Вызов функции 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)

(Чисто для демонстрации моего примера не обманывают ^^)

13
ответ дан 5 December 2019 в 08:22
поделиться

Глобальный устанавливает переменную. Поэтому isset ($ some_globald_variable) всегда будет возвращать истину.

Лучшим вариантом является empty ()

 if(empty($globald_variable))
 {
 // variable not set
 } 
-1
ответ дан 5 December 2019 в 08:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: