比较运算符

等于运算符 == 返回两个值类型转换后是否相等。如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。

<?php

var_dump(0 == 'foo');    // bool(true)
var_dump(1 == '01');     // bool(true)
var_dump('10' == '1e1'); // bool(true)

以上规则同样也适用于 switch 语句。

<?php

$foo = 'foo';
switch ($foo) {
    case 0:
        var_dump(0);
        break;
    case 'foo':
        var_dump('foo');
        break;
}
// int(0)

全等运算符 === 返回两个值的类型和数值是否相等。

<?php

var_dump(0 === '0');   // bool(false)
var_dump(100 === 1e2); // bool(false)

不等运算符 != 返回两个值类型转换后是否不等。

<?php

var_dump(0b11 != '3');    // bool(false)
var_dump(0 != '001');     // bool(true)
var_dump('foo' != 'bar'); // bool(true)

不全等运算符 !== 返回两个值的类型或数值是否不等。

<?php

var_dump(0 !== '0');   // bool(true)
var_dump(100 !== 1e2); // bool(true)

小于运算符 < 返回一个值是否严格小于另一个值。

<?php

var_dump(3 < 3);      // bool(false)
var_dump(3 < 10);     // bool(true)
var_dump(3 < 'foo');  // bool(false)
var_dump(3 < '0010'); // bool(true)

大于运算符 > 返回一个值是否严格大于另一个值。

<?php

var_dump(3 > 3);      // bool(false)
var_dump(10 > 3);     // bool(true)
var_dump('foo' > 3);  // bool(false)
var_dump('0010' > 3); // bool(true)

小于等于运算符 <= 返回一个值是否小于或等于另一个值。

<?php

var_dump(3 <= 3);      // bool(true)
var_dump(3 <= 10);     // bool(true)
var_dump(3 <= 'foo');  // bool(false)
var_dump(3 <= '0010'); // bool(true)

大于等于运算符 >= 返回一个值是否大于或等于另一个值。

<?php

var_dump(3 >= 3);      // bool(true)
var_dump(10 >= 3);     // bool(true)
var_dump('foo' >= 3);  // bool(false)
var_dump('0010' >= 3); // bool(true)

太空船运算符(组合比较符) <=> 当一个值小于、等于、大于另一个值时分别返回一个小于、等于、大于 0 的整数。

<?php

var_dump(1 <=> 1);                                               // int(0)
var_dump(2 <=> 1);                                               // int(1)
var_dump(1 <=> 2);                                               // int(-1)

var_dump('foo' <=> 'foo');                                       // int(0)
var_dump('foo' <=> 'bar');                                       // int(1)
var_dump('bar' <=> 'foo');                                       // int(-1)

var_dump([] <=> []);                                             // int(0)
var_dump([2, 4, 5] <=> [2, 4, 5]);                               // int(0)
var_dump([2, 4, 5] <=> [2, 4, 4]);                               // int(1)
var_dump([2, 4, 4] <=> [2, 4, 5]);                               // int(-1)

var_dump(['foo' => 'cat'] <=> ['foo' => 'cat']);                 // int(0)
var_dump(['foo' => 'dog'] <=> ['foo' => 'cat']);                 // int(1)
var_dump(['foo' => 'cat'] <=> ['foo' => 'dog']);                 // int(-1)
var_dump(['foo' => 'cat', 'bar' => 'dog'] <=> ['foo' => 'cat']); // int(1)
var_dump(['foo' => 'cat'] <=> ['bar' => 'dog']);                 // int(1)

$foo = (object)['foo' => 'cat'];
$bar = (object)['foo' => 'cat'];
var_dump($foo <=> $bar);                                         // int(0)

$foo = (object)['foo' => 'dog'];
$bar = (object)['foo' => 'cat'];
var_dump($foo <=> $bar);                                         // int(1)

$foo = (object)['foo' => 'cat'];
$bar = (object)['foo' => 'dog'];
var_dump($foo <=> $bar);                                         // int(-1)

$foo = (object)['foo' => 'cat'];
$bar = (object)['bar' => 'dog'];
var_dump($foo <=> $bar);                                         // int(1)

另一个条件运算符是 ?: (或三元运算符)。 表达式一 ? 表达式二 : 表达式三 在表达式一求值为 true 的时候值为表达式二,在表达式一求值为 false 的时候值为表达式三。建议避免将三元运算符堆积在一起使用。当在一条语句中使用多个三元运算符时会造成 PHP 运算结果不清晰。

<?php

$foo = 'foo';
$bar = isset($foo) ? $foo : 'bar';
var_dump($bar); // string(3) "foo"

可以省略三元运算符中间那部分。 表达式一 ?: 表达式二 在表达式一求值为 true 时返回表达式一,否则返回表达式二。

<?php

$foo = 'foo';
$bar = isset($foo) ?: 'bar';
var_dump($bar); // bool(true)

NULL 合并操作符 ?? 返回从左往右第一个存在且不为 NULL 的操作数。如果都没有定义且不为 NULL,则返回 NULL

<?php

$foo = $foo ?? 'foo';
var_dump($foo); // string(3) "foo"

$bar ??= 'bar';
var_dump($bar); // string(3) "bar"

results matching ""

    No results matching ""