【PHP 运算符】foo()和 @foo()之间的区别


一. 运算符考点

1. PHP的运算符的错误控制符@的使用及其作用

PHP支持一个错误控制符:@。当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

2. 延伸:PHP所有运算符考点

1) PHP运算符优先级(从高到低)

  • 递增 / 递减
  • !
  • 算术运算符(+-*/)
  • 大小比较
  • (不)相等比较
  • 引用
  • 位运算符(^)
  • 位运算符(|)
  • 逻辑与(&&)
  • 逻辑或(||)
  • 三目(?:)
  • 赋值($a = false)
  • and
  • xor
  • or

注:括号的使用可以增加代码可读性,推荐使用

2) 比较运算符:== 和 ===的区别

  • == 比较值是否相等; === 比较值是否相等,类型是否相同。
  • 等值判断(FALSE的七种情况)
var_dump(''== false);// bool(true)
var_dump('0' == 0);// bool(true)
var_dump(0.0 == 0);// bool(true)

FALSE的七种情况都满足:

  • 整型 0
  • 浮点型 0.0
  • 零字符串 ‘0’
  • 空字符串 ‘’ “
  • 空数组 array()
  • null
  • 布尔型 false

3) 递增/递减运算符

  • 递增/递减运算符不影响布尔值;
    • true++; // true
    • true–; // true
    • false++ ; // false
    • false–; // false
  • 递减NULL值没有效果;递增NULL值为1;
    • NULL–; // NULL
    • NULL++; // 1
  • 递增和递减在前,就先运算,后返回;反之就先返回,后运算

4) 逻辑运算符

  1. 短路作用
var_dump($a = true || $b == 3); // bool(true) 前面是 true,后面不会执行【|| : 一真为真】
var_dump($b = false && $a == 1);// bool(false) 前面是 false,后面不会执行【&&:一假为假】
  1. ||&&orand 的优先级不同
$a = false || true; // 先执行 false || true,得到 true,再赋值给 $a
var_dump($a); // bool(true)
$b = false or true;// 先执行 $b = false,整体为 true,则 $b的值为 false
var_dump($b);// bool(false)

二. 解题方法

重点记忆:递增/递减运算符的运算规则,逻辑运算符的 短路效果,在看到逻辑运算符要多考虑 优先级 问题。

三. 真题

下列程序中,请写出打印输出的结果:

$a = 0;
$b = 0;

if ($a = 3 > 0 || $b = 3 > 0) {
    var_dump($a); // bool(true)
    var_dump($b); // int(0)
    $a++;
    $b++;
    echo $a."\n"; // 1
    var_dump($a); // bool(true)
    echo $b."\n"; // 1
    var_dump($b); // int(1)
}

分析:

1)优先级问题:(从大到小)
    >
    ||
    =
2)执行顺序
    3 > 0;                     // true
    (3>0) || $b = 3 > 0;    // true ($b = 3 > 0 不执行)
    $a = true;
    $b = 0;
3) 递增运算
    $a++; // $a = true; true++; => true  => 1
    $b++; // $b = 0; 0++; => 1
$a = 0;
$b = 0;

if ($a = 3 > 0 || $b = 3 > 0) {
    var_dump($a); // bool(true)
    var_dump($b); // int(0)
    $a++;
    $b++;
    echo $a."\n"; // 1
    var_dump($a); // bool(true)
    echo $b."\n"; // 1
    var_dump($b); // int(1)
}

运算结果:

$a = true;
$b = 1;

文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
 上一篇
【PHP面试题】请列出3种PHP数组循环操作的语法,并注明各种循环的区别。 【PHP面试题】请列出3种PHP数组循环操作的语法,并注明各种循环的区别。
一. 流程控制考点1. PHP的遍历数组的三种方式及各自区别1) 遍历数组的方式 使用 for循环; 使用 foreach循环; 使用 while、list()、each()组合循环; 2) 区别 for循环:只能遍历索引数组; fore
2020-07-05
下一篇 
PHP 常量及数据类型 PHP 常量及数据类型
数据类型三大数据类型(标量,复合,特殊) 标量: 字符串 整型 浮点型 布尔型 NULL 复合: 数组 对象 特殊: 资源 浮点类型不能用于精确的相等的判断 $a = 0.1; $b = 0.7; if ($a+$b ==
2020-07-05
  目录