如何使 PHP 包含/需要组合?
Posted
技术标签:
【中文标题】如何使 PHP 包含/需要组合?【英文标题】:How can I make PHP include/require compositional? 【发布时间】:2014-05-15 10:00:05 【问题描述】:我被the issue in this question 击中:php 对include
、require
、require_once
等的路径解析不是我所期望的。
这个问题的根本原因显然是所有 PHP 文件中的路径都是相对于最初执行的脚本的位置进行解析的。但是,我和其他许多人一样,希望分辨率与包含 include
/require
的文件的位置相关。
我为解释该行为而链接的问题的答案,但没有解决如何解决它。在我看来,PHP 的解析方法本质上是非组合的:每个文件的编写都必须假设它是从特定位置包含的,这打破了模块自包含的组合原则。
那么,我该如何解决这个问题?有没有“固定”版本的require_once
使用我和其他人所期望的解析语义?
【问题讨论】:
如果你想包含当前目录中的某些东西(或者从当前目录开始跟随任何路径),为什么不这样指定,让路径以./
开头? ./../f2/f2.inc.php
之类的东西可能看起来很奇怪,但完全有效。
@GhostGambler 我不明白。 ./../f2/f2.inc.php
不等于 ../f2/f2.inc.php
吗?还是 ./
让 PHP 以不同的方式解释它?
包含路径,可能是 PHP 最不为人知的特性之一
是的,不,这也行不通。我的错。 __DIR__
解决方案很好。顺便说一下,您可能希望使用自动加载功能,而不是手动包含文件。
【参考方案1】:
使用__DIR__
。
例如:
require __DIR__ .'/file_in_same_directory.php';
http://www.php.net/manual/en/language.constants.predefined.php
【讨论】:
啊,好吧。是的,I can see that that would work。是否有对其进行抽象的标准函数/语句,例如require_relative
?
你想让它做什么?例如你需要`require(DIR .'/../../something_two_dirs_up.php');抱歉,markdown 打破了这个,你明白了
我希望有一些 PHP 语句基本上可以:function require_once_relative($path) require_once(__DIR__ . $path);
如果您认为需要,您可以随时制作。我个人不喜欢这个想法,我宁愿只看到路径。使用__DIR__
时,PHPStorm 也可以很好地与自动完成路径配合使用以上是关于如何使 PHP 包含/需要组合?的主要内容,如果未能解决你的问题,请参考以下文章