PHP运算优先级小Tips

  最近在学习php,刚好看到一串代码,代码内容,大概是这样。

1
2
3
4
5
6
7
8
9
10
11
<?php
@$a = $_GET['a'];
@$b = $_GET['b'];
$c = is_numeric($a) and is_numeric($b);
if($c){
print "hello world";
}
else{
print "sb";
}
?>

  首先php中的is_numeric()函数是用来检查变量是否是数字和数字字符串,如果是,则返回TRUE的布尔值,如果不是则返回FALSE。

1

  那么我们看到即使传入的参数b为字符串,结果也是返回为真的hello world。我们加几个var_dump()看下结果

2

  按照常理来说,应该最后的出来的结果应该是sb才对。然后在运算比较中我们发现有“=”和“and”,在PHP中“=”的优先级大于“and”。因此当a传入为的变量为数字或者数字串的是否,a为TRUE,且将TRUE赋值给了c。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
@$a = $_GET['a'];
@$b = $_GET['b'];
$c = (is_numeric($a) and is_numeric($b));
var_dump(is_numeric($a));
var_dump(is_numeric($b));
var_dump($c);
if($c){
print "hello world";
}
else{
print "sb";
}
?>

  我们将c后变量括号起来之后发现运算结果不一样了。

3

  这姑且算是PHP的一个特性,做个记录,怕以后如果自己写,忘记了。