2011-02-03 105 views
5

空格空间在PHP语法中通常被忽略,但有几个地方不能在不影响意义(和结果)的情况下放置它们。PHP:空白空间

一个例子是:

$a = 5.5; // five and a half (float) 
$b = 5 . 5; // "55" (string) 

你知道的任何其他的例子吗?

的问题是不是关于为什么是这种方式工作,但什么是情况下,当省略或放置空白改变了计划,但两个版本的语法正确。

+0

这是一个很好的;-) – 2011-02-03 10:32:31

+0

是的,以及所有其他PHP和其他语言的书面和口头怪癖。对不起,这个问题是什么? – PurplePilot 2011-02-03 10:34:30

+2

第二种情况的一个很好的变体是`$ b = 5 ... 5;` - 尽管它构成了更多的情况下空间将有助于可读性。 – mario 2011-02-03 10:39:35

回答

0

在你的例子中,你打破了两个单一的词法标记(有点像打破functionfunc tion,空白确实没有被这样忽略)。这并不是很有意思,当事情突破时你可以想出很多例子,唯一有趣的任务是尝试找到一个例子,其中工作(即不是语法错误),但不同,例如:

$a = $x++ + $y; // x is incremented 
$b = $x+ + + $y; // x is not incremented 
8

那个人让我狂暴。我提出末日的空白:

function foo() { 
    print "I'm foo."; 
} 

if (something()) { 
    foo(); 
} 

执行时,将错误是:

Fatal error: Call to undefined function foo() on line 6

一个小时左右后,我发现,该错误消息实际上说:

Fatal error: Call to undefined function foo() on line 6

注意双空格:

function foo()

原来,由拷贝/粘贴上面的代码(与highlight_string格式化的),一个非间断空间 ,或0xA0是在标识符可接受,所以该函数调用是0xA0foo()代替foo()

2

您不能在空格的数字中间!天哪!

$x = 10 3.5; //syntax error 

如果你把一个空间在运营商的中间,它不再是运营商!

if (true & & true) echo 'true'; //syntax error 

如果我把一个空间在我的字符串的中间,这是不一样的串!

echo "Hel lo World"; //does NOT print "Hello World"! 

很抱歉,但这个问题很可笑,因为你当然不能在令牌的中间扔空间既没有改变行为或断码。几乎与其他所有编程和书面语言一样。

5.5是一个数字,5 . 5是一个字符串,因为.是字符串连接运算符。这只是语言的语法。