php包含和关闭标记

Ros*_*oss 8 php tags include

看到一个关于省略?>PHP脚本关闭的线程,让我感到疑惑.

拿这个代码:

foo.php

<?php
echo 'This is foo.php';
include('bar.php');
Run Code Online (Sandbox Code Playgroud)

bar.php

<?php   
echo 'This is bar.php';
Run Code Online (Sandbox Code Playgroud)

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

This is foo.php
This is bar.php
Run Code Online (Sandbox Code Playgroud)

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

那么,为什么: baz.php

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

<?php
echo 'This is bar.php';
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bar*_*lom 10

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

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

//foo.php
<?php
echo 'yo';
?>
Run Code Online (Sandbox Code Playgroud)

即使在内联时它也会成为

<?php
<?php
echo 'yo';
?>
?>
Run Code Online (Sandbox Code Playgroud)

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

<?php
?>
<?php
echo 'yo';
?>
<?php
?>
Run Code Online (Sandbox Code Playgroud)

您可以省略关闭?>因为在包含文件的末尾,PHP切换回解析包含文件,关注它当前所处的模式.