isset()和PHP全局变量

时间:2010-04-03 14:17:08

标签: php function variables global-variables

我对全局变量初始化有疑问。

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

在调用hello_testing()函数之前,可能无法初始化全局变量(conditional_random)。

那么,当isset()未初始化时,通过$conditional_random验证会发生什么?它会失败还是永远都是真的?

3 个答案:

答案 0 :(得分:13)

嗯,你为什么不试试? ; - )

注意:不像你想象的那么容易 - 阅读完整的答案; - )


调用hello_testing();函数,而不设置变量:

hello_testing();

我没有输出 - 表示isset返回 false


设置变量后调用该函数:

$conditional_random = 'blah';
hello_testing();

我得到一个输出:

foo is inside

这表示global按预期工作,当变量设置为时 - 嗯,不应该对此有任何疑问^^



但请注意,如果设置了变量,则isset将返回falsenull
请参阅manual page of isset()

这意味着更好的测试将是:

function hello_testing() {
  global $conditional_random;
  var_dump($conditional_random);
}

hello_testing();

显示:

null

没有注意:变量存在!即使null

由于我没有在函数外部设置变量,因此它显示global 设置变量 - 但它没有为其赋值;这意味着它是null,如果还没有设置在函数之外。


同时:

function hello_testing() {
  //global $conditional_random;
  var_dump($conditional_random);
}

hello_testing();

给予:

Notice: Undefined variable: conditional_random

证明已启用通知; - )

并且,如果全局没有“设置”变量,前面的例子会给出相同的通知。


最后:

function hello_testing() {
  global $conditional_random;
  var_dump($conditional_random);
}

$conditional_random = 'glop';
hello_testing();

给予:

string 'glop' (length=4)

(纯粹是为了证明我的例子不被欺骗^^)

答案 1 :(得分:8)

您可以通过检查$ GLOBALS中是否存在密钥来检查全局是否已创建:

echo array_key_exists('fooBar', $GLOBALS)?"true\n":"false\n";
//Outputs false

global $fooBar;

echo array_key_exists('fooBar', $GLOBALS)?"true\n":"false\n";
//Outputs true

echo isset($fooBar)?"true\n":"false\n";
//Outputs false

这是我所知道的唯一检查全局存在而不会发出警告的方法。

Manos Dilaverakis提到,你应该尽可能避免使用全局变量。

答案 2 :(得分:-1)

Global设置变量。因此isset($some_globald_variable)将始终返回true。

更好的选择是empty()

 if(empty($globald_variable))
 {
 // variable not set
 }