PHP中三元运算符的结合性

春节之后上了两门Coursera课程,又跟集智俱乐部研究了一个多月神经网络,一篇博客都没写完。今天先从一篇短文开始,再慢慢完成之前的一些草稿。

昨天鸟哥在PHP Conference讲到PHP7的AST时,说起PHP的一个历史遗留问题:三元运算符的结合性。PHP的语法是类似于C的,但是在这里却不一样。

例如,在C语言中:

#include <stdio.h>

int main(int argc, char **argv)
{
    char var;
    var = 1?'a':0?'b':'c';
    printf("%c", var);
    return 0;
}

输出的结果为a
而在PHP中

<?php

echo 1?'a':0?'b':'c';

输出的结果为b

这是因为,在C语言中,表达式1?'a':0?'b':'c'被解释为

1 ? 'a' : ( 0 ? 'b' : 'c' )

而在PHP中,被解释为

( 1 ? 'a' : 0 ) ? 'b' : 'c'

也即,在PHP中,三元运算符是左结合的,这很奇怪,而且似乎是各种语言中唯一一个这样的

这曾经被认为是一个bug,但是过去由于某些原因无法被修复。现在在PHP7中可以修复了。但是大家已经不准备修复它了。(reddit.com, grokbase.com

PHP中三元运算符的结合性》有6个想法

  1. Pingback引用通告: PHP 那些“坑” R11; 企业网站欣赏,HTML5模板下载,JQUERY特效,网页素材下载

  2. Pingback引用通告: PHP 那些“坑” R11; 企业网站欣赏,HTML5模板下载,JQUERY特效,网页素材下载

  3. Pingback引用通告: PHP 那些“坑” R11; 企业网站欣赏,HTML5模板下载,JQUERY特效,网页素材下载

  4. Pingback引用通告: PHP 那些“坑” - 奇奇问答

  5. Pingback引用通告: PHP 那些“坑” | 程式前沿

  6. Pingback引用通告: PHP 那些“坑” - 程序員的後花園

  7. Pingback引用通告: PHP 那些“坑” - 算法网

  8. Pingback引用通告: PHP 那些“坑” - 算法网

  9. Pingback引用通告: PHP 那些“坑” _ 脚本宝典

  10. Pingback引用通告: PHP 那些“坑” R11; FIXBBS

  11. Pingback引用通告: PHP 那些“坑” R11; FIXBBS

  12. Pingback引用通告: PHP 那些“坑” R11; FIXBBS

  13. Pingback引用通告: PHP 那些“坑” R11; FIXBBS

  14. Pingback引用通告: PHP 那些“坑” R11; FIXBBS

  15. Pingback引用通告: PHP 那些“坑” R11; FIXBBS

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注