0

在 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;
}

只需将一系列东西传递给它

4

2 回答 2

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'];
于 2013-07-03T17:54:53.897 回答
1

这在 PHP 中不起作用,原因如下:

$somevar['propertyOne'] = false;
$somevar['propertyTwo'] = true;

$test = $somevar['propertyOne'] || $somevar['propertyTwo'];

想象一下将该查询输入到 if 语句中:

if( $somevar['propertyOne'] || $somevar['propertyTwo'] ){ ... }

如果任一变量为真,这将返回真(计算为 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 中,您将表达式的结果存储到变量中,而不是对任何内容进行任何验证。

于 2013-07-03T18:07:49.333 回答