UNPKG

manual-php

Version:
188 lines (126 loc) 5.01 kB
# 比较运算符 等于运算符 `==` 返回两个值类型转换后是否相等。如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。 ```php <?php var_dump(0 == 'foo'); // bool(true) var_dump(1 == '01'); // bool(true) var_dump('10' == '1e1'); // bool(true) ``` 以上规则同样也适用于 `switch` 语句。 ```php <?php $foo = 'foo'; switch ($foo) { case 0: var_dump(0); break; case 'foo': var_dump('foo'); break; } // int(0) ``` 全等运算符 `===` 返回两个值的类型和数值是否相等。 ```php <?php var_dump(0 === '0'); // bool(false) var_dump(100 === 1e2); // bool(false) ``` 不等运算符 `!=` 返回两个值类型转换后是否不等。 ```php <?php var_dump(0b11 != '3'); // bool(false) var_dump(0 != '001'); // bool(true) var_dump('foo' != 'bar'); // bool(true) ``` 不全等运算符 `!==` 返回两个值的类型或数值是否不等。 ```php <?php var_dump(0 !== '0'); // bool(true) var_dump(100 !== 1e2); // bool(true) ``` 小于运算符 `<` 返回一个值是否严格小于另一个值。 ```php <?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 <?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 <?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 <?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 <?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 <?php $foo = 'foo'; $bar = isset($foo) ? $foo : 'bar'; var_dump($bar); // string(3) "foo" ``` 可以省略三元运算符中间那部分。 `表达式一 ?: 表达式二` 在表达式一求值为 `true` 时返回表达式一,否则返回表达式二。 ```php <?php $foo = 'foo'; $bar = isset($foo) ?: 'bar'; var_dump($bar); // bool(true) ``` `NULL` 合并操作符 `??` 返回从左往右第一个存在且不为 `NULL` 的操作数。如果都没有定义且不为 `NULL`,则返回 `NULL` 。 ```php <?php $foo = $foo ?? 'foo'; var_dump($foo); // string(3) "foo" $bar ??= 'bar'; var_dump($bar); // string(3) "bar" ```