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, php7

仅有一条评论

  1. [...]http://bayescafe.com/php/the-associativity-of-ternary-operator-in-php.html[...]

添加新评论