and && or ||优先级问题:
and or的优先级低于&& || ,且低于=。
因此$b1 = $bA and $bB
先运算的是$b1 = $bA
。
$bA = true;
$bB = false;
$b1 = $bA and $bB;
$b2 = $bA && $bB;
var_dump($b1); // $b1 = true
var_dump($b2); // $b2 = false
$bA = false;
$bB = true;
$b3 = $bA or $bB;
$b4 = $bA || $bB;
var_dump($b3); // $b3 = false
var_dump($b4); // $b4 = true
{}块级作用域:
php中{}外面是可以取到其内部值的。PHP有函数作用域,但是没有块级作用域。
if(1){
$a = 123;
}
print_r($a); // $a = 123;
for ($i = 0; $i < 10; $i++) {
for ($j = 0; $j < 10; $j++) {
$k = 777;
}
}
var_dump($j);//输出10
var_dump($k);//输出777
$arr = [1, 2, 4];
foreach ($arr as &$val) {
$val *= 2;
}
$val = [];//重新赋值
$val[0]=9;
$val[1]=10;
var_dump($arr,$val);
输出:
array(3) {
[0]=>
int(2)
[1]=>
int(4)
[2]=>
&array(2) {
[0]=>
int(9)
[1]=>
int(10)
}
}
array(2) {
[0]=>
int(9)
[1]=>
int(10)
}
由于$arr as &$val
,循环到第三个元素, arr数组的第三个元素变成引用arr数组的第三个元素变成引用val。虽然重新赋值为空数组,但后面的修改还是会影响到了arr。原因是arr。原因是val是一个引用,后面的修改都会影响到,除非加unset($val)。