看到一个关于省略?>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.
Bar*_*lom 10
如果你包含一个文件,PHP会在内部从解析转换为文字模式(即通常在结束标记上执行的操作.这就是为什么这样做的原因:
<?php
include 'foo.php';
?>
//foo.php
<?php
echo 'yo';
?>
即使在内联时它也会成为
<?php
<?php
echo 'yo';
?>
?>
因为它在某种程度上被转化为类似的东西(为了说明的目的,实际上它可能实际上并不合并文件的内容,它只是在它们之间跳转)
<?php
?>
<?php
echo 'yo';
?>
<?php
?>
您可以省略关闭?>因为在包含文件的末尾,PHP切换回解析包含文件,关注它当前所处的模式.