PHP 块语法约定



对不起,如果这是一个听起来完全裸露的问题。我是PHP语法约定的新手,所以我不完全确定我应该寻找什么。

我得到的书给出了以下示例作为 html 代码中的传统 php 块。

<?php
//... some code ...
?>

明白了,但令人困惑的是,我正在查看 xampp 的一些示例代码(例如 CD 集合源代码)似乎不遵循相同的约定。

相反,示例代码读起来更像这样。

<? include("langsettings.php"); ?>
<?
//... some code ...
?>

这两种形式在所有意图和目的上都是等价的,还是我完全错过了对这里的 php 介绍至关重要的东西?

另外为什么 php 不使用结束标签(或者它并且我只是没有看到它们)?我想我正在考虑带有结束标签的 javascript,但我想无论哪种方式,它们本身就是代码库,所以它可以工作。似乎html的语法核心是对称性,但是php语法排序打破了这种对称性,这很奇怪。

谢谢你的时间。

它们之间的唯一区别是第二个需要启用设置short_open_tag(在新 PHP 版本中默认关闭)。

<?php常规打开标签。

<? 短开放标签(默认禁用)

除此之外,将类似<? include("langsettings.php"); ?>的东西放置在自己的行上,封闭在自己的一对<? ?>中,实际上是特定于您发现它的源的样式问题。 不同的项目使用非常广泛的不同约定,PHP书籍都倾向于采用自己的约定。

不幸的是,PHP没有任何真正特定的编码约定,就像你在Ruby,Java或Python等语言中可能发现的那样,在我看来,这是PHP的主要失败之一,也是它最大的灵活性之一。

现在,关于短开放标签是否适合在现代PHP应用程序中使用完全是一个单独的问题,这里已经详细讨论了这个问题。

这两种形式是等价的,但你会发现简码会给你带来问题。我会坚持使用常规标签:

<?php

和关闭的块

?>

编辑:结束标记是可选的,但前提是您希望开始标记之后的所有内容都被解释为 PHP,直到页面末尾。

这些块之外的任何内容都被解释为 HTML,因此您必须确保观察打开和关闭的位置。

例如:

<body>
<h1> The Heading </h1>
<p>
   <?php
      echo "This is the Content";
   ?>
</p>
</body>

将工作,并将 php 生成的字符串输出到您的段落标签中。

PHP 与 javascript 类似,因为它没有"open"和"close"标签,而是使用分号来声明特定 php 语句的结尾。

include "file1.php";
include "file2.php";

如果你忘记了分号,就像这样

include "file1.php"
include "file2.php";

这将生成错误。

PHP 块的结束标记是 ?> 。结束标记不是必需的,但如果要将页面的一部分解释为 PHP,将其他部分解释为文字 HTML,则可以使用它。如果人们想在页面开头进行一些PHP处理,有时会这样做,然后编写一个普通的静态HTML页面,其中只有几个PHP变量回显。

换句话说,<?php标记之后和?>标记之前的文本被解释为 PHP。如果省略结束标记,则开始 php 标记和页面末尾之间的所有文本都将被解释为 PHP。

一个例外是,如果您在 php 块中打开一个条件语句,然后关闭 php 块,则页面上的所有后续文本都将受该条件的约束,直到您启动一个新的 php 块并关闭条件语句。例如,如果运行脚本:

<?php
if(1==0) {
?>
<B>conditional HTML</B>
<?php
}
?>

两个 PHP 块之间的 HTML 不会出现在页面上。

请注意,不同的 PHP 块都是同一脚本的一部分。在一个块中定义的变量、函数和类可以被该页面上的其他块使用,依此类推。

PHP 起始标记为 <?php,结束标记为 ?>

如果服务器上允许使用短标记,您也可以使用<? ?>语法。

您可以在 Offcial PHP 文档中阅读更多相关信息

此致敬意汤姆。

有关短版本长开放标签的问题已经涵盖。

我只想提到这些问题中的一个常见问题,这些答案中尚未提及。

比较以下内容:

<?php
 /*
  * Some comments here, (c) notice, etc.
  */
  header("Content-type: text/html");
  ...

<?php
 /*
  * Some comments here, (c) notice, etc.
  */
?>
<?php
  header("Content-type: text/html");
  ...

第二个不起作用。

为什么?

在 PHP 的第一个块和第二个块之间有一行非 PHP 代码的空白行。 在不使用输出缓冲的服务器环境中,空行向 PHP 发出信号,表示标头都已完成,从这一点开始的任何内容都是发送到浏览器的 HTML(或其他任何东西)的一部分。

然后,我们尝试发送一个标头。 它产生:

Warning: Cannot modify header information - headers already sent

所以。。。小心你的空白行。 PHP 内部的空行很好。 在你的PHP之外,它可能会有令人讨厌的副作用。

最新更新