我试图弄清楚如何解释PHP 的include
结构,例如它是否是文本包含、何时评估等。像往常一样,文档是相当非正式和模糊的。
根据实验,它似乎是语法糖。具体来说,构造
include 'Baz.php'
是一个可以替换为的表达式
eval('?>' . file_get_contents('Baz.php', FILE_USE_INCLUDE_PATH))
这个对吗?这种替换在一般情况下是正确的,还是仅在我的测试中是正确的?
编辑:正如 bwoebi 所指出的,这通常不是真的,因为 uatedeval
代码没有相同的__DIR__
和__FILE__
魔法常数。如果有一些方法可以设置它们,我们也可以建模。
编辑 2:这个问题是这个问题的副本:Equivalent of include using eval。但是,那里的所有答案似乎都忽略了 bwoebi 关于文件路径上下文的观点。