什么是?:在PHP5.3中?
可能重复: 从什么是?:在PHP5.3中?,php,php-5.3,ternary-operator,conditional-operator,language-construct,Php,Php 5.3,Ternary Operator,Conditional Operator,Language Construct,可能重复: 从 Twitto使用了PHP 5.3中提供的几个新功能: DIR常数 操作员:操作员 匿名函数 在PHP5.3中,数字2和有什么关系?: 还有,匿名函数是什么意思?这不是已经存在一段时间了吗 ?:是条件运算符的一种形式,以前只能作为: expr ? val_if_true : val_if_false 在5.3中,可以省略中间部分,例如expr?:val\u if\u false,这相当于: expr ? expr : val_if_false 从: 由于PHP5.3,可
Twitto使用了PHP 5.3中提供的几个新功能:
?:
是条件运算符的一种形式,以前只能作为:
expr ? val_if_true : val_if_false
在5.3中,可以省略中间部分,例如expr?:val\u if\u false
,这相当于:
expr ? expr : val_if_false
从:
由于PHP5.3,可以省略条件运算符的中间部分。表达式expr1?:如果expr1
的计算结果为TRUE
,则expr3
返回expr1
,否则返回expr3
?:
运算符是(通常称为三元运算符):
表达式(expr1)?(expr2):(expr3)
计算为expr2
如果expr1
计算为TRUE,而expr3
如果expr1
计算为FALSE
在下列情况下:
expr1 ?: expr2
如果expr1
为真,则表达式计算为expr1
的值,否则:
由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1
的计算结果为TRUE,则expr3
返回expr1
,否则返回expr3
由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为真,则expr3返回expr1,否则返回expr3
匿名函数:不,它们不存在(请参见示例下面的第一个注释),至少是这样:
function ($arg) { /* func body */ }
唯一的方法是
create_function()
,它速度较慢,相当麻烦,而且容易出错(因为使用字符串来定义函数)。已经回答了至少两次,@gordon,我知道这对这些主题意味着什么,我认为这是不一样的,因为网站说它从5.3开始是新的,而且我从来没有见过它们像“?:“@Gordon那样在一起,这些只是更长的形式@jasondavis,你有:和?问题的题目倒过来了。啊,好的。新的是你可以省略中间部分。匿名函数(lambda和closures)也是5.3的新添加,尽管您可以使用以前的create\u function
创建函数。这不是重复的。谢谢!当我看到他们像那样在一起时,我很困惑“:”我搜索了一下,但没有找到任何东西。嗯,很酷。这使得?:
相当于Javascript中的| |
!作为额外的奖励,您可以“链接”它们:$foo=$bar?:$bazz?:$yadda?:$qux;//$foo将被分配第一个truthy变量的值。不确定这是否是一个糟糕的想法(有些人不喜欢嵌套三元运算符),但确实如此。@MSpreij我想说这是它的一个简明用法。通常情况下,嵌套三元运算符很糟糕,是的(在某些情况下,我会原谅最多一个嵌套层)。上述方法的替代方法是一个非常长且丑陋的if/elseif/else块,这实际上是一种浪费。只要有一条评论,比如你为没有经验的程序员写的评论,那么我会发现这个链接是完全可以接受的(事实上,我很高兴使用它,谢谢你指出!)@MSpreij实际上,为了进一步证明这不是一个糟糕的主意,PHP7引入了(我自己忘记了这个)它做了类似的事情,并且具有相同的通用语法-区别在于isset()
vs truthy value。
function ($arg) { /* func body */ }