Reply to Re: true?2:false?3:4 - is it a bug?

Your name:

Reply:


Posted by Andy Hassall on 05/22/05 15:57

On 21 May 2005 22:04:33 -0700, "Chung Leong <chernyshevsky@hotmail.com>"
<chernyshevsky@hotmail.com> wrote:

>Interesting. In C, you would get 2,

Indeed; PHP appears to have different results here to several other major
languages.

andyh@server:~/tmp/ternary$ cat ternary.c
#include <stdio.h>

#define TRUE 1
#define FALSE 0

int main()
{
printf("%d\n", TRUE ? 2 : FALSE ? 3: 4);
return 0;
}
andyh@server:~/tmp/ternary$ gcc -o ternary ternary.c
andyh@server:~/tmp/ternary$ ./ternary
2

andyh@server:~/tmp/ternary$ cat ternary.pl
#!/usr/bin/perl
print 1 ? 2 : 0 ? 3 : 4;
print "\n";
andyh@server:~/tmp/ternary$ ./ternary.pl
2

andyh@server:~/tmp/ternary$ cat ternary.php
<?php
echo true ? 2 : false ? 3 : 4;
echo "\n";
?>
andyh@server:~/tmp/ternary$ php -q ternary.php
3


The issue is operator associativity; Perl (and C) implements the ternary
operator as right-associative, whereas PHP implements it as left-associative.

This is documented in the Operators section in the PHP manual so it might be
hard to call it a bug, but it seems to be at least a design mistake to have
implemented it with the opposite associativity of the "original" languages.

--
Andy Hassall / <andy@andyh.co.uk> / <http://www.andyh.co.uk>
<http://www.andyhsoftware.co.uk/space> Space: disk usage analysis tool

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация