2010-06-13 52 views
1

在PHP中,有没有一种方法可以更简化,而无需使用if()PHP简化三元操作

$foo = $bar!==0 ? $foo : ''; 

我想知道是否有办法不重新分配$foo本身如果条件满足。我知道有一种方法可以在Javascript中执行此操作(使用& &,对吧?),但想知道是否有方法在PHP中执行此操作。

+4

为什么你想要更简单呢?每次遇到类似这样的事情时,你是否希望那些将要维护代码的可怜人搜索手册?我不会。 – 2010-06-13 23:58:47

+0

投票赞成,好点子1月 – Obay 2010-06-14 00:13:24

+2

也是对该评论的赞扬,@Jan。 'if($ bar == 0)$ foo ='';'就像三元一样简单,不涉及自赋值,实际上更具可读性。 – paxdiablo 2010-06-14 00:26:45

回答

5

是的,您也可以在PHP中使用逻辑运算符和(&&)运算符。

$bar === 0 && $foo = ''; 
+0

你有这个方法的任何文档/教程吗?我已经看到它的使用,但从来没有完全理解它。 – 2010-06-14 02:15:38

+2

@Kerry和'if($ foo && $ bar)'一样。而不仅仅是变量或值,你可以把整个表达式放在那里,比如'if($ foo == 0 && $ bar ='baz')'。但它不一定只用于'if()'表达式中。 '&&'是一个短路操作符,意味着如果前半部分是'假',它不会评估下半部分。所以'$ foo ='''只会在'$ bar === 0'时才被查看并执行。 – deceze 2010-06-14 02:53:57

+0

哇,很好的解释,谢谢:) – 2010-06-14 03:29:59

9

在PHP 5.3中,三元运算符的缩写形式终于到来了,所以您可以执行以下操作。

$foo = $bar ?: ''; 

the Comparison Operators节 - “自PHP 5.3,就可以离开了三元运算符的中间部分表达表达式1:如果表达式1的值为TRUE,而表达式3否则expr3返回值为表达式1。?。”

+0

该代码不会做op要求的,我没有看到一种方法来利用短三元运算符在这里。 – Furgas 2017-08-25 08:40:51