2012-11-26 60 views
-3

我最近升级了我的服务器(本地WAMP和生产箱到PHP 5.4),并且使用了分号扩展,我没有抱怨我对此没有爱;但不知道该代码如何在本地运行,并且在没有错误的生产环境中运行,并且错误报告设置为E_ALL ...我以为PHP需要分号码吗?

我以为我需要一个;之后<? phpinfo ?> < - 显然不是!

这不会产生错误之一:<? print_r(apache_get_modules()) ?>

这个工作没有分号,以及:<? foreach (getallheaders() as $name => $value) printf("%s:%s \n", $name, $value, PHP_EOL) ?>

所有这些代码并不代错误,而像我朋友的遗漏;我想知道WTF在发生什么?

是因为我的PHP 5.4版本还是做phpinfo,print_r和printf不需要分号?

所有这些代码的运行没有任何错误:

<div id="tabs"> 
    <div id="tab_one"><pre>Server Variables: <? print_r($_SERVER) ?></pre></div> 
    <div id="tab_two"><pre>Server and PHP interface: <?= PHP_SAPI ?></pre></div> 
    <div id="tab_three"><pre>Apache Modules: <? print_r(apache_get_modules()) ?></pre></div> 
    <div id="tab_four"><pre><?= apache_get_version() ?></pre></div> 
    <div id="tab_five"><pre><? foreach (getallheaders() as $name => $value) printf("%s:%s \n", $name, $value, PHP_EOL) ?></pre></div> 
    <div id="tab_six"> 
     <p><a href="/server-status?refresh=3" target="_blank">Server Status</a></p> 
     <br /> 
     <p><a href="/server-info/" target="_blank">Server Info</a></p> 
    </div> 
</div> 

Cornfused?

+3

你问我 –

回答

2

根据"Instruction Separation" in the PHP manual

PHP代码块的结束标记自动意味着以分号;你不需要用分号来终止PHP块的最后一行。

+0

检查谷歌,但结果是不同的,我cornfused为... 我95%肯定,如果它不是一个速记回声<?= {}东西?>分号隐含地需要(至少在PHP 5.2.X中)... PHP 5.3或5.4有什么改变? 欣赏响应! –

+0

@BillJobs:哦,你做了Google? O.K.,然后+1。 :-)至于PHP版本。 。 。我不确定是否可以在线获得旧版本的PHP手册,但是我可以访问运行PHP 5.2.17的计算机,而“<?回声“foo”?>'在那里工作得很好。我在[PHP 5 Changelog](http://www.php.net/ChangeLog-5.php)中没有看到这方面的任何信息。 – ruakh

+0

ruakh,很好的回复。讽刺语言必须是你的主要编程语言,做得好,出色,做得好。超级,非常感谢。干得好,欢呼声。真棒,史诗般的工作。你做的很好,是Stack Overflow的重要贡献者。真棒。保持! –