php包含和关闭标记

时间:2010-11-23 09:43:07

标签: php tags include

看到一个关于省略PHP脚本中的结束?>的线程,让我感到疑惑。

拿这段代码:

foo.php

<?php
echo 'This is foo.php';
include('bar.php');

bar.php

<?php   
echo 'This is bar.php';

如果你创建这两个脚本并运行它们,php输出:

This is foo.php
This is bar.php

(在任何人指出之前添加了艺术许可的新行)

那么,为什么: 的 baz.php

<?php
echo 'This is foo.php';

<?php
echo 'This is bar.php';

导致可预测的语法错误unexpected '<',当“include”就是这样 - 或者更确切地说,我对include的理解是PHP只是在那时转储文件,好像它一直在那里一样。

如果包含该文件,PHP是否会检查开始标记并忽略将来的标记?当一个脚本中有两组标签时,为什么不这样做呢?

感谢您的任何澄清。这不是一个重要的问题,但更好地理解PHP。

4 个答案:

答案 0 :(得分:10)

如果你包含一个文件,PHP会在内部从解析转换为文字模式(即通常在结束标记上执行的操作。这就是为什么这样做的原因:

<?php
include 'foo.php';
?>

//foo.php
<?php
echo 'yo';
?>

即使在内联时它也会变成

<?php
<?php
echo 'yo';
?>
?>

因为它在某种程度上被转化为类似的东西(为了说明的目的,实际上它可能实际上并不合并文件的内容,它只是在它们之间跳转)

<?php
?>
<?php
echo 'yo';
?>
<?php
?>

您可以省略结束吗?&gt;因为在包含文件的末尾,PHP切换回解析包含文件,关注它当前所处的模式。

答案 1 :(得分:2)

个人猜测:

当你写include('bar.php');时,解析器读取内容为bar.php并将其插入foo.php,当读取它时可能剥离起始{{1}因为它识别<?php的所有内容都是PHP代码,因此结果不会出错。

答案 2 :(得分:1)

将PHP视为实际包括第一个中的其他页面可能会有所帮助,因为PHP内部不会创建包含所有包含页面的单个文件,然后解析。

它的作用是解析第一个文件,找到include,然后停止解析第一个文件并开始解析包含的文件。当包含的文件完成后,它将继续解析它停止的原始文件。 (虽然这有点简化。)

答案 3 :(得分:0)

我在某处读到了省略开启和关闭php标签的内容。

我这样做时的问题是我的编辑器没有将文件格式化为php文件,而是将其格式化为常规文本文件。

到目前为止,我从未遇到任何包含标签的包含文件的问题。我不知道是否使用标签是折旧行为。