通过三元运算符进行自我分配

时间:2015-02-06 06:12:38

标签: javascript php ternary-operator

是否可以通过三元运算符为变量赋值,而不必两次引用相同的变量?

例如,有没有这样的方式:

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

可以这样做吗?:

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

我知道上面的这条线可能不起作用,所以我在第一行给出了一个简短的选择。

小变量名称(如上例所示)的问题并非如此。但是,如果有一种方法可以使用数组和更大的变量名称,以帮助保持代码紧凑,那将是很好的。我会对Javascript和PHP解决方案感兴趣。

2 个答案:

答案 0 :(得分: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 :(得分:-1)

检查

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