在JavaScript中,我可以这样做:
var somevar = {
propertyTwo : false,
propertyThree : "hello!"
}
var test = somevar.propertyOne || somevar.propertyTwo || somevar.propertyThree
alert(test); //displays "hello!"
PHP中是否有类似的功能? 一直无法在网上找到任何东西。
我试过这个,但是PHP只是将它视为比较和回声的1
(true
)
$somevar = array(
'propertyTwo' => false,
'propertyThree' => "hello!"
);
$test = $somevar['propertyOne'] || $somevar['propertyTwo'] || $somevar['propertyThree'];
echo $test; //displays '1'
如果没有,那真的不是什么大不了,但我认为在php 5.x中提供的所有铃声和口哨声中,会有某种简写在值列表中指定第一个真值这样的单一变量。
我想我可以写一个函数。
编辑:
我怀疑,PHP没有相同的怪癖。
我写的快速功能
function assign_list($list){
foreach($list as $v)
if(isset($v) && $v) return $v;
return false;
}
只需传递一系列内容
答案 0 :(得分:1)
以下内容适用于PHP >= 5.3
,但您仍会收到Notice Error
,因为propertyOne
未定义。
<?php
$somevar = array(
'propertyTwo' => false,
'propertyThree' => "hello!"
);
$test = $somevar['propertyOne'] ?: $somevar['propertyTwo'] ?: $somevar['propertyThree'];
echo $test; //displays 'hello!'
然而,您可以通过压制变量来解决这个问题,但非常不推荐:
$test = @$somevar['propertyOne'] ?: @$somevar['propertyTwo'] ?: @$somevar['propertyThree'];
答案 1 :(得分:1)
这在PHP中不起作用,原因如下:
$somevar['propertyOne'] = false;
$somevar['propertyTwo'] = true;
$test = $somevar['propertyOne'] || $somevar['propertyTwo'];
想象一下,将该查询键入if语句:
if( $somevar['propertyOne'] || $somevar['propertyTwo'] ){ ... }
如果任一变量为真,则返回true(计算结果为1)。
现在,如果我们将所有变量设为= false
:
$somevar['propertyOne'] = false;
$somevar['propertyTwo'] = false;
$test = $somevar['propertyOne'] || $somevar['propertyTwo'];
变量返回false(计算结果为0)。
我们可以做的另一件事是:
$somevar['propertyOne'] = true;
$somevar['propertyTwo'] = true;
$test = $somevar['propertyOne'] && $somevar['propertyTwo'];
这将返回true(计算结果为1),因为两个变量都符合标准。
这意味着我们可以在PHP中执行以下操作:
$test = $somevar['propertyOne'] || $somevar['propertyTwo'];
if($test){ ... }
TL,DR:在PHP中,您将表达式的结果存储到变量中,而不对任何内容进行任何验证。