2015-02-06 80 views
1

是否可以通过三元运算符为变量赋值,而不必再次引用同一个变量?通过三元运算符自行分配

例如,有没有一种方式是这样的:

a=a=="1"?"yes":"no"; 

可以这样做?:

a=="1"?"yes":"no"; 

我知道上面可能行也不行,所以我考虑到第一行,我们正在寻求一个简短的选择。

这对于小变量名称(比如上面的例子)来说并不是什么大问题。但是,如果在使用数组和更大的变量名时有一种方法来帮助保持代码紧凑,那将会很不错。我会对Javascript和PHP解决方案感兴趣。

+1

没有就没有办法(对PHP) – Rizier123 2015-02-06 06:14:40

+0

不,你的第二个办法是行不通的。你需要做一些事情,比如你的第一种方式。 – jfriend00 2015-02-06 06:14:41

+0

您必须访问变量进行读取,然后进行写入。 – 2015-02-06 06:25:45

回答

1

否,三元运算符被严格定义为:

p ? vt : vf 

随着p导致一个布尔(因此测试)的表达式,vt值的情况下,p为真和在壳体vf测试是错误的。没有办法引入副作用。当然,测试(可以是函数调用或任何其他测试)可能会导致副作用。

据我所知,在任何情况下,运营商都没有这种副作用。这可能也是一个坏主意:副作用应该有据可查并且有点明确。如果事情没有任何语法警告,源代码变得难以阅读,调试和理解。

您可以将结果确实分配给像变量:

的JavaScript

var x = 3; 
var x = (x < 3) ? "smaller" : "larger"; 

或者在PHP

$x = 3; 
$x = ($x < 3) ? "smaller" : "larger"; 

在这里你却与警告=运营商的价值x将在该指令后改变。

-1

入住这

<?php 
$a = 5;  
$a = ($a==5) ? 'yes' : 'no';  
echo 'the result is '.$a; // the result is yes 
?> 
+0

除了......您刚刚在同一个变量的第二个出现处放置括号,有效_extending _在我的问题的第一行代码。我想要检查变量并为其赋值,而不是多次输入相同的变量。 – 2015-02-06 06:43:56

+0

Hi @Tristan Bailey,第二行检查变量$ a并根据条件赋值$ a的新值。没有第一行,echo的结果将是“结果是否定的”。 – 2015-02-06 09:41:54

+0

Hi @Tristan Bailey,我给出了我的答案的解释。变量需要被分配一个值,然后检查这是我试图从我的答案表达。 – 2016-02-04 05:17:05