isset($var) == "Test"
和isset($var) && $var == 'Test"
之间有什么区别?
答案 0 :(得分:2)
第一个毫无意义。如您所见,isset
返回一个布尔值。所以我所说的isset($var) == "Test"
会对一个字符串计算一个bool。
评估isset($var) && $var == 'Test'
PHP首先检查变量$ var是否已定义,然后该值是否等于字符串'test'。
只调用$var == 'Test
而不确保它已设置将导致'未定义变量'通知。如果您不确定并且不想要嘈杂的日志,那么您可以使用isset进行检查。
答案 1 :(得分:2)
这是一个简短的例子:
$var = "Chuck Test";
var_dump(isset($var)); // bool(true)
var_dump(isset($undefined)); // bool(false)
var_dump(isset($var) == "Chuck Test"); // bool(true)
var_dump(isset($var) && $var == "Chuck Test"); // bool(true)
var_dump(isset($undefined) == "Chuck Test"); // bool(false)
var_dump(isset($undefined) && $undefined == "Chuck Test"); // bool(false)
看起来它们是等价的,但它们不是:
var_dump(isset($var) == "Chuck Testa"); // bool(true) !!!
var_dump(isset($var) && $var == "Chuck Testa"); // bool(false)
因为isset()返回true
或false
,与true
相比非空字符串会导致true
。
因此,最好使用isset($var) && $var == "Test"
变体,因为它可以达到预期效果。
答案 2 :(得分:1)
如果设置了变量,函数isset()
将返回true(布尔值)。现在当你比较一个布尔值==“测试”时,它就是假的。因此,要检查您的变量是否已设置且值是否为“测试”,您应使用isset($var) && $var == 'Test'
。但我不明白为什么你不应该做`$ var =='测试'。翻译是否以这种方式抱怨未初始化的变量?
如果您不理解isset
函数实际执行的操作,请阅读以下内容,提出任何问题:
http://php.net/manual/en/function.isset.php