比较运算符

比较运算符,如同它们名称所暗示的,允许对两个值进行比较。

  • $a == $b,如果类型转换后 $a 等于 $b,返回 TRUE。
  • $a === $b,如果 $a 等于 $b,并且它们的类型也相同,返回 TRUE。
  • $a != $b,如果类型转换后 $a 不等于 $b,返回 TRUE。
  • $a <> $b,等同于 !=
  • $a !== $b,如果 $a 和 $b 的值或类型不同,返回 TRUE。
  • $a < $b ,如果 $a 严格小于 $b,返回 TRUE。
  • $a > $b,如果 $a 严格大于 $b,返回 TRUE。
  • $a <= $b,如果 $a 小于或者等于 $b,返回 TRUE。
  • $a >= $b,如果 $a 大于或者等于 $b,返回 TRUE。

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。

<?php

var_dump(null == "");
var_dump(null == false);
var_dump(true > false);
var_dump(0 == "a");
var_dump("1" == "01");
var_dump("10" == "1e1");
var_dump(100 == "1e2");
var_dump([4,5] < [1,2,3]);
var_dump((object)"Test" > "Test");
var_dump((object)"Test" > [2,3]);

switch ("a") {
case 0:
    echo "0";
    break;
case "a": 
    echo "a";
    break;
}

结果输出

bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
0

从结果可以看出

  • null 或 String 和 string 比较时,将 null 转换为 “”,进行数字或词汇比较
  • bool 或 null 和其他类型比较时,转换为 bool,FALSE < TRUE
  • string,resource 或 number 相互比较时,将字符串或资源转换为数字,按普通数字比较
  • array 之间比较时,具有较少成员的数组较小
  • object 和其他类型比较时,object 总是更大
  • array 和其他类型比较时,array 总是更大,但是比对象小
  • switch 中第一个条件满足时,不会执行后面满足条件的语句

 

错误控制运算符

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

<?php

$my_file = @file ('non_existent_file') or
    die ("Failed opening file: error was '$php_errormsg'");

$value = @$cache[$key];

错误控制运算符只对表达式有效。对新手来说一个简单的规则就是:

  • 如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量,函数和 include 调用,常量,等等之前。
  • 不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。

注意:目前的 @ 错误控制运算符前缀甚至使导致脚本终止的严重错误的错误报告也失效。这意味着如果在某个不存在或者敲错了字母的函数调用前用了 @ 来抑制错误信息,那脚本会没有任何迹象显示原因而死在那里。

 

执行运算符

PHP 支持一个执行运算符:反引号(“)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。

<?php
$output = `ls -al`;
echo "<pre>$output</pre>";

注意,反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。