PHP变量声明速记(类似于JavaScript)

时间:2013-07-03 17:48:07

标签: php variables

在JavaScript中,我可以这样做:

var somevar = {
    propertyTwo : false,
    propertyThree : "hello!"
}

var test = somevar.propertyOne || somevar.propertyTwo || somevar.propertyThree

alert(test); //displays "hello!"

PHP中是否有类似的功能? 一直无法在网上找到任何东西。

我试过这个,但是PHP只是将它视为比较和回声的1true

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

只需传递一系列内容

2 个答案:

答案 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中,您将表达式的结果存储到变量中,而不对任何内容进行任何验证。