PHP 包含语义

标签 php php-include

我正在努力研究如何解释 PHP's include construct ,例如是否包含文本,何时评估等。像往常一样,文档相当非正式和模糊。

根据实验,它似乎是语法糖。具体来说,构造

include 'Baz.php'

是一个表达式,可以替换为

eval('?>' . file_get_contents('Baz.php',  FILE_USE_INCLUDE_PATH))

这是正确的吗?这种替换在一般情况下是正确的,还是仅在我的测试中正确?

编辑:正如 bwoebi 指出的那样,这通常不是真的,因为 evaluated 代码没有相同的 __DIR____FILE__ 魔法常量.如果有某种方法可以设置它们,我们也可以对其进行建模。

编辑 2:这个问题与这个问题重复:Equivalent of include using eval .但是,那里的所有答案似乎都忽略了 bwoebi 关于文件路径上下文的观点。

最佳答案

是的,这应该是普遍正确的。

唯一的区别是:

  • 文件上下文(它现在是 eval() 的代码,而不是来自该文件的代码)
  • 相对路径:当您在其他目录中包含文件并且它们使用自己的相对路径时,它指向的文件现在可能找不到了
  • file_get_contents() 不受 allow_url_include ini 设置的影响(虽然 allow_url_fopen 影响两者)

关于PHP 包含语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23681582/

相关文章:

php - 初级MySQL语法错误

php - 无法在 Angular 2 中将数据从表单发布到 mysql

javascript - php 函数中的 ajax html $_POST 值返回 null

php - 将配置从 service.yaml 移动到 Symfony5 中的另一个文件

javascript - 使用 javascript 来定位 php include 中的元素

php - 完整的 URL 不适用于 php include

javascript - 在所有页面上显示相同的内容(页眉、导航栏、侧边栏、页脚),无需服务器端脚本 (PHP)

php - 从类中调用和执行函数

php:使用参数从另一个 php 文件执行 php 文件

php - 是否需要包含来自 gomoob :php-pushwooshto to run a PHP program to send push notifications to iPhone? 的任何文件