Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是?:在PHP5.3中?_Php_Php 5.3_Ternary Operator_Conditional Operator_Language Construct - Fatal编程技术网

什么是?:在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中提供的几个新功能:

  • 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,可以省略条件运算符的中间部分。表达式
    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 */ }