是否可以在三元运算符中评估超过 3 个条件?我正在使用yii 1.1
并向单元格添加颜色,我使用以下条件...
'cssClassExpression'=> '$data->PRIORITY == 1 ? "red" : $data->PRIORITY==2 ? "yellow": "white"',
...但它对我不起作用,因为如果优先级是一(1),它总是用yellow
.
是否可以在三元运算符中评估超过 3 个条件?我正在使用yii 1.1
并向单元格添加颜色,我使用以下条件...
'cssClassExpression'=> '$data->PRIORITY == 1 ? "red" : $data->PRIORITY==2 ? "yellow": "white"',
...但它对我不起作用,因为如果优先级是一(1),它总是用yellow
.
不管我不使用的 Yii 是什么,而不是使用多个三元组,我都会反映您想要使用object实现的逻辑。这为您的应用程序增加了灵活性,使其更便携,更易于维护/更新。
如果明天您必须处理 5 或 50 个颜色代码,您的三条件三元会发生什么变化?如果您有一个对象,您只需将元素添加到该对象,并且不必修改进行比较的代码。
想想在几十个文件中使用您的三元组的上下文,您将不得不去查找该代码以使其适应新条件。对于一个集中在一个地方的对象,您只需修改该对象即可。此外,使用对象可以更轻松地将代码集成到数据模型中:数据库表、json、xml 等。
在此示例中,我们将使用固定颜色:
现在在各种情况下:
离开:
让我们看看另一个上下文中的另一个测试:
离开:
关键时刻,App必须进化
有一天他们告诉你你必须合并一个新的颜色
green
代码9,999,999
(那个漂亮的代码现在对你来说是一场噩梦,因为你必须去寻找那些9,999,999
你已经实现它的地方现在添加颜色green
并创建一个由 4 个条件组成的三元组?但是不,你听我的!:)你已经在
$colorCodes
. 那时你会感激这个答案,因为要让你的应用程序的上下文适应新的情况,你只需要写 10 个字符!新的应用程序,通过将其添加到4=>'green'
. 而已。代码仍然可以正常工作,无论您是在一个文件中还是在数千个文件中。进化的对象是这样的:
从现在开始,在 App 中将会有
$data
s 。PRIORITY 4
没有恐慌。您的代码是可移植的,没有问题:
离开:
只需修改
$colorCodes
.笔记
我不使用 yii... 但是在 C# 中,当您想在三元运算符中使用多个条件时,必须将它们括在括号中。
所以:
所以你会有这样的事情:
三元运算符从左到右求值。所以如果你没有正确地对表达式进行分组,你会得到一个意想不到的结果。
正如@A.Cedano向您建议的那样,这是一种更正确的方法,但是如果您真的想使用三元运算符,则必须使用括号将它们分开,如下所示:
PHP 提示是 [docs] :,它在Example #4 Non-obvious Tternary Behavior中说
作为建议,为了使代码更易于阅读,我建议您不要使用非常复杂的三元运算符或非常复杂的 lambda 表达式......
但是关于您的问题,您是否已经尝试过括号和逻辑运算符“和”“或”是否有效?
这里有两件事我不知道你想做什么:
如果你想做的是这样的:
if(a==1 and a==2) {code }else{ code }
尝试这个:
如果你想要的是
if
像这样连接:如果(a==1){如果(a==2){code}}else{code}
尝试将三元运算符分层放在括号内
或者你也可以这样做:
一切都取决于您想要做的条件类型
想想以下......三元运算符的工作原理如下
如果在“CONDITION”部分评估为 true,则执行“RESULT TRUE”,如果评估“CONDITION1”为 false,则执行“RESULT FALSE”