如何使 PHP 包含/需要组合?

Posted

技术标签:

【中文标题】如何使 PHP 包含/需要组合?【英文标题】:How can I make PHP include/require compositional? 【发布时间】:2014-05-15 10:00:05 【问题描述】:

我被the issue in this question 击中:phpincluderequirerequire_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 包含/需要组合?的主要内容,如果未能解决你的问题,请参考以下文章

如何使单个字段包含可单独排序的多条数据?

如何组合两个没有裂缝的正弦波[关闭]

Select2:如何使列表不包含在下拉列表和多选中

如何正确缩进 PHP/HTML 混合代码? [关闭]

php如何判断字符串是不是是字母和数字的组合

php如何判断字符串是不是是字母和数字的组合