4

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

我得到的书将以下示例作为 html 代码中的常规 php 块。

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

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

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

<? include("langsettings.php"); ?>

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

这两种形式在所有意图和目的上都是等效的,还是我完全错过了这里介绍 php 的关键内容?

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

谢谢你的时间。

4

5 回答 5

4

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

<?php常规打开标签。

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

除此之外,将类似的东西<? include("langsettings.php"); ?>放在自己的一行中,<? ?>这实际上是一个特定于您找到它的源代码的样式问题。不同的项目使用非常不同的约定,并且每个 PHP 书籍都倾向于采用自己的惯例。

不幸的是,PHP 没有任何真正的特定编码约定,例如您可能在 Ruby、Java 或 Python 等语言中找到的,在我不请自来的意见中,这是 PHP 的主要失败之一,也是其最大的灵活性之一。

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

于 2012-06-06T17:44:01.447 回答
3

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

<?php

和封闭的街区

?>

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

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

例如:

<body>

<h1> The Heading </h1>

<p>
   <?php
      echo "This is the Content";
   ?>
</p>

</body>

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

PHP 与 javascript 的相似之处在于它没有“打开”和“关闭”标签,而是使用分号来声明特定 php 语句的结束。

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

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

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

这将产生一个错误。

于 2012-06-06T18:02:08.957 回答
1

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 块都是同一脚本的一部分。在一个块中定义的变量、函数和类可以被该页面上的其他块使用,依此类推。

于 2012-06-06T17:44:16.697 回答
0

PHP 开始标签是<?php,结束标签是?>.

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

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

最好的问候,汤姆。

于 2012-06-06T17:48:33.033 回答
0

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

我将在这些答案中尚未提及的问题中提到一个常见的问题。

比较以下内容:

<?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 之外,它可能会产生令人讨厌的副作用。

于 2012-06-06T21:14:12.363 回答