0

我有当前的树。

/edu/index.php
/edu/Classes/Connection.php
/edu/Classes/User.php
/edu/Handlers/Post.php

当我需要使用index.php 中Connection.php和内部的函数时,我需要它们使用:User.php

require_once './Classes/Connection.php';
require_once './Classes/User.php';

但是 from 的一些函数User.php也需要函数 fromConnection.php才能工作,所以既然index.php是请求的来源,我需要Connection.php在里面User.php使用:

require_once './Classes/Connection.php';

但有时我需要使用相同的功能Post.php,所以

require_once './Classes/Connection.php';如果是文件发送请求,内部User.php不起作用。Post.php

没有统一的路径或解决方案,以便我能够以相同的方式从项目中的任何位置获取文件吗?我真的很想避免这样的解决方案......

public function UserFunction($path){
  require_once $path;
}

并根据我在项目文件夹中的位置更改每次调用的参数。

4

2 回答 2

1

如果您尝试包含的文件主要是类,则最好实现该__autoload功能。当您实例化一个类时,如果尚未定义该类,则__autoload使用类名调用该方法,以便您可以包含该文件。如果您创建一个简单的标准,就像所有类都驻留在$_SERVER['DOCUMENT_ROOT'].'/classes/'文件夹中并且文件名与类名一样ClassName.php,您可以根据需要动态加载任何类。

此外,一般都看不起,但我想我会提到它,因为我还没有看到它提供。您可以调用一个函数,该set_include_path()函数将允许您设置 php 在包含文件时查看的路径。但是,这可能会引起一些麻烦。例如,我的工作在子域下托管多个站点,每个站点都有自己的文档根目录。在文档根目录下,每个站点都有自己的“包含”文件夹。大约 8 年前,一些天才将全局 apache 配置中的包含路径设置为/var/www/site1/includes;/var/www/site2/includes...etc. 问题是当存在一个同名的文件site1并且site2你尝试包含它时,你总是会包含该文件,site1因为 php 会在那里找到该文件并停止查找。它不时引起一些小头痛。

于 2013-05-29T22:38:42.857 回答
1

最好的方法是包含 relative to__DIR__ 以获取相对于另一个文件的文件。

您可以包含的其他优点是

$_SERVER["DOCUMENT_ROOT"]

或使用 htaccess 自己制作。

在 .htaccess 中

SetEnv MY_INCLUDE_PATH "/path/to/my/php/files";

然后在 php

include ($_SERVER["MY_INCLUDE_PATH"]."/Connection.php");
于 2013-05-29T22:27:01.330 回答