$result = "hello" ?: "world";
echo $result;
?: 三院操作符如果忽略?后边的值,表示如果条件为真,则表达式的结果为?左边的值.
一些主要的运算符的优先级如下:
**new > instanceof > !> 比较运算符 > && > || > ? :赋值运算符 > and > or >, **
可以通过如下的例子具体体验一下
class Test{
}
var_dump( new Test() instanceof Test || 0 ? false: true) ;
var_dump( new Test() instanceof Test or 0 ? false: true) ;
var_dump( new Test() instanceof Test || (0 ? false: true) ) ;
?>
["value", "value"]
同 [ 0 => "value", 1 => "value"]
$a = ["hello_world" => 'PHP'];
$b = ["hello_world" => 'java'];
var_export($a + $b);
结果:
如果碰到相同的字符串键, 则在+的时候自动忽略后一个.因此结果为
array (
'hello_world' => 'PHP',
)
而array_merge函数则是在碰到相同的字符串键,用后一个值去覆盖了前一个值.因此,
var_export(array_merge($a, $b));
输出结果:
array (
'hello_world' => 'java',
)
$a = [3 => 'PHP'];
$b = [3 => 'java'];
var_export($a + $b);
数组+运算, 如果碰到相同的数字键, 则在+的时候自动忽略后一个.因此结果为:
结果为:
array (
3 => 'PHP',
)
综上所述,不论是数字键还是字符串键,数组+运算会自动保留之前存在的键,而不会覆盖.
那么,array_merge函数对数字键有事怎么处理的呢?
$a = [3 => 'PHP'];
$b = [3 => 'java'];
var_export(array_mrege($a,$b));
array_merge函数会自动对数字键进行重新列, 其结果不会忽略任何一个数字键对应的元素.因此,结果:
array (
0 => 'PHP',
1 => 'java',
)