我有当前树。
/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';
但是User.php
的一些功能也需要Connection.php
的功能来工作,所以由于index.php
是请求来自的地方,我需要Connection.php
在User.php
内使用:
require_once './Classes/Connection.php';
但有时我需要使用与Post.php
相同的函数,所以
如果Post.php
是发送请求的文件,则require_once './Classes/Connection.php';
在User.php
中不起作用。
是不是有一个统一的路径或解决方案,使我能够要求文件从任何地方在我的项目以同样的方式?我真的希望避免像……这样的解决方案。
public function UserFunction($path){
require_once $path;
}
并根据我在项目文件夹中的位置更改每次调用的参数
如果您试图包含的文件主要是类,那么最好实现__autoload
函数。当您实例化一个类时,如果还没有定义这个类,那么用类名调用__autoload
方法,这样您就可以包含这个文件。如果你创建一个简单的标准,就像所有的类都在$_SERVER['DOCUMENT_ROOT'].'/classes/'
文件夹中,文件名与ClassName.php
这样的类名相同,你可以动态加载任何需要的类。
而且,通常被看不起,但我想我应该提到它,因为我还没有看到它提供。您可以调用set_include_path()
函数,该函数允许您设置php在包含文件时查找的路径。然而,这可能会引起一些麻烦。例如,我的工作在子域下托管了几个站点,每个站点都有自己的文档根。在文档根目录下,每个站点都有自己的"includes"文件夹。8年前,一些天才将apache全局配置中的include路径设置为/var/www/site1/includes;/var/www/site2/includes...etc
。问题是,当site1
中存在与site2
同名的文件并且您试图包含它时,您将始终包含来自site1
的文件,因为php会在那里找到该文件并停止查找。
最好的方法是包含相对于__DIR__
来获得相对于另一个文件的文件。
其他可以包含from的优点是
$_SERVER["DOCUMENT_ROOT"]
或者使用htaccess自己创建。
in .htaccess put
SetEnv MY_INCLUDE_PATH "/path/to/my/php/files";
then in PHP
include ($_SERVER["MY_INCLUDE_PATH"]."/Connection.php");