比较运算符


比较运算符

比较运算符,如同它们名称所暗示的,允许对两个值进行比较。还可以参考 PHP 类型比较表看不同类型相互比较的例子。

比较运算符
例子 名称 结果
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a !== $b 非全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。

如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。此规则也适用于 switch 语句。 <?php
var_dump
(== "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 1 == 1 -> true
switch ("a") {
case 
0:
    echo 
"0";
    break;
case 
"a"// never reached because "a" is already matched with 0
    
echo "a";
    break;
}
?>

对于多种类型,比较运算符根据下表比较(按顺序)。

比较多种类型
运算数 1 类型 运算数 1 类型 结果
nullstring string NULL 转换为 "",进行数字或词汇比较
boolnull 任何其它类型 转换为 boolFALSE < TRUE
object object 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明
stringresourcenumber stringresourcenumber 将字符串和资源转换成数字,按普通数学比较
array array 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例)
array 任何其它类型 array 总是更大
object 任何其它类型 object 总是更大

Example #1 标准数组比较代码

<?php
// 数组是用标准比较运算符这样比较的
function standard_array_compare($op1$op2)
{
    if (
count($op1) < count($op2)) {
        return -
1// $op1 < $op2
    
} elseif (count($op1) > count($op2)) {
        return 
1// $op1 > $op2
    
}
    foreach (
$op1 as $key => $val) {
        if (!
array_key_exists($key$op2)) {
            return 
null// uncomparable
        
} elseif ($val $op2[$key]) {
            return -
1;
        } elseif (
$val $op2[$key]) {
            return 
1;
        }
    }
    return 
0// $op1 == $op2
}
?>

参见 strcasecmp()strcmp()数组运算符类型一章。

三元运算符

另一个条件运算符是“?:”(或三元)运算符 。

Example #2 赋默认值

<?php
 
// Example usage for: Ternary Operator
 
$action = (empty($_POST['action'])) ? 'default' $_POST['action'];

 
// The above is identical to this if/else statement
 
if (empty($_POST['action'])) {
     
$action 'default';
 } else {
     
$action $_POST['action'];
 }

 
?>
表达式 (expr1) ? (expr2) : (expr3)expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3

Note: 注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。

Note:

建议避免将三元运算符堆积在一起使用。当在一条语句中使用多个三元运算符时会造成 PHP 运算结果不清晰: Is is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious:

Example #3 不清晰的三元运算符行为

<?php
// 乍看起来下面的输出是 'true'
echo (true?'true':false?'t':'f');

// 然而,上面语句的实际输出是't',因为三元运算符是从左往右计算的

// 下面是与上面等价的语句,但更清晰
echo ((true 'true' 'false') ? 't' 'f');

// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>


«  位运算符
» 错误控制运算符
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 美丽的闪电 2015辞职报告模板 当樱花落了,一切也都结束了…… 秋天的果园作文350字 财政干部 警示教育心得 我家的“母老虎” 14年度最新教学实习报告范文5000字 我所认识的许佳 寻雾作文250字 6.25土地日环保演讲稿保护耕地,人人有责 我的祖国900字作文 我们不是最好,却是更好 人最怕就是动了心 某商场创建巾帼文明岗”验收报告 回头,幸福还在微笑... 求职信范文(理工科专业) 过年了,花开了 我们应该怎样对待时间?(转载) 八一建军节祝贺词大全 假如我是雪花 结合科学发展观构建六大机制建设合格区委班子 小学五年级作文350字:家乡大变化 新学期,新感悟作文450字 大学生入党申请书范本推荐 那些年,曾经的爱 玉树之子 心得体会 经历过的,也都过了。 统计局财务工作计划 那位老人作文350字 亮剑精神读后感 舌尖上的中国2家常观后感 妈妈节日快乐! 铁军执行力培训心得 经典英语电影台词 高中高一作文800字:宜春实验小学 我爱他,他不爱我 小学生寒假日记500字 还没兮还没兮 【精品】幼儿教师工作感言 我的电脑简介 赠李文通 小学四年级作文400字:故乡的茶花树 英语简历中怎样地道形容自己 妈妈,请放开我的手作文200字 那件事深深地触动了我 巴菲特曾被拒门外 圣洁的兰花 2016年企业公司新春贺词 情感的刺作文250字 消失宾妮语录大全,让生者承担死者遗留的痛苦。 古典诗词

Copyright © 2016 phpStudy |