使用include时PHP类路径冲突

使用include时PHP类路径冲突,php,class,path,include,Php,Class,Path,Include,我有一个问题,包括类。下面是一个简单的例子来解释这个问题: 第1类(路径:/home/day/Class_A.php): 第2类(路径:/home/test/Class_B.php): PHP文件(路径:/home/PHP.PHP) 问题是,当php.php包含Class_B且Class_B包含Class_A时,Class_B无法打开Class_B,因为该类对象的路径现在与php.php文件相同 我的问题是: 有没有一种简单有效的方法来解决这个问题?试着改变一下: include "../day

我有一个问题,包括类。下面是一个简单的例子来解释这个问题:

第1类(路径:/home/day/Class_A.php):

第2类(路径:/home/test/Class_B.php):

PHP文件(路径:/home/PHP.PHP)

问题是,当php.php包含Class_B且Class_B包含Class_A时,Class_B无法打开Class_B,因为该类对象的路径现在与php.php文件相同

我的问题是: 有没有一种简单有效的方法来解决这个问题?

试着改变一下:

include "../day/Class_A.php";

这样,您的include将与执行include(Class_B)的文件相关。

尝试更改:

include "../day/Class_A.php";


这样,您的include将与执行include(Class_B)的文件相对。

看起来像是
问候语
不是一个静态函数,因此您不能执行以下操作:

Class_B::greeting()

您必须获得一个B类对象并对其调用greeting,或者将
static
添加到
greetings
声明中

第二,为什么uuse不要求一次?在php.php中

require_once('test/ClassB.php')

在ClassB.php中:


require_once('../day/ClassA.php')

看起来像是
问候语
不是一个静态函数,因此您不能执行以下操作:

Class_B::greeting()

您必须获得一个B类对象并对其调用greeting,或者将
static
添加到
greetings
声明中

第二,为什么uuse不要求一次?在php.php中

require_once('test/ClassB.php')

在ClassB.php中:


require_once('../day/ClassA.php')

使用“自动加载”,这是一个您定义的神奇函数,它使PHP能够让您知道何时没有加载类,但需要加载该类

If you define the __autoload function like so,
function __autoload ($classname)
{
    require('/path/to/my/classes/'.$classname.'.php');
}
you no longer need to add
require_once('/path/to/my/classes/MyClass.php');
into your files, because the first time that PHP encounters
$mine = new MyClass();
or
MyClass::staticMethodCall();
it will automatically call the __autoload function that you defined earlier.
__autoload('MyClass');

资源:

使用“自动加载”,这是一个神奇的函数,您可以定义它,它使PHP能够让您知道何时没有加载类,但需要加载该类

If you define the __autoload function like so,
function __autoload ($classname)
{
    require('/path/to/my/classes/'.$classname.'.php');
}
you no longer need to add
require_once('/path/to/my/classes/MyClass.php');
into your files, because the first time that PHP encounters
$mine = new MyClass();
or
MyClass::staticMethodCall();
it will automatically call the __autoload function that you defined earlier.
__autoload('MyClass');

资源:

将类存储在可添加到包含路径的目录下。使用require_once并使路径(在require_once构造中)相对于添加到类的包含路径。将类存储在可以添加到包含路径的目录下。使用require_once并使路径(在require_once构造中)相对于添加到类的include路径。谢谢,但实际上我想要的是相反的,也就是说:它总是相对于类。类B总是在
/dir/test/
中吗?类A总是在
/dir/day/
中吗?那么如果你使用我给出的方法就可以了
dirname(\uuuu FILE\uuuu)
返回代码在其中执行的文件的路径,即Class\u B。是的,它执行了。我错过了早些时候的“/”before“。这就是我要找的。谢谢,伙计。啊,很好,很抱歉,是的,我最初忘记了,然后编辑了帖子,添加了
/
,但是你很快就在编辑之前尝试了:)谢谢,但我实际上想要的是相反的,也就是说:它总是相对于类。类B总是在
/dir/test/
中吗?类A总是在
/dir/day/
中吗?那么如果你使用我给出的方法就可以了
dirname(\uuuu FILE\uuuu)
返回代码在其中执行的文件的路径,即Class\u B。是的,它执行了。我错过了早些时候的“/”before“。这就是我要找的。谢谢,伙计。啊,很好,很抱歉,是的,我最初忘记了,然后编辑了帖子,添加了
/
,但是你很快就在编辑之前尝试了:)我读过一次require_不是一个好主意,因为它会释放内存。不记得原因了。我将修复类_B..不是因为它会丢失内存,而是因为它必须检查文件是否已经加载,所以增加了逻辑,但我认为好处和简单性超过了这些小的性能问题。看看这个:我读到过一次require_不是一个好主意,因为它会释放内存。不记得原因了。我将修复类_B..不是因为它会丢失内存,而是因为它必须检查文件是否已经加载,所以增加了逻辑,但我认为好处和简单性超过了这些小的性能问题。看看这个:
include dirname(__FILE__) . '/../day/Class_A.php';
If you define the __autoload function like so,
function __autoload ($classname)
{
    require('/path/to/my/classes/'.$classname.'.php');
}
you no longer need to add
require_once('/path/to/my/classes/MyClass.php');
into your files, because the first time that PHP encounters
$mine = new MyClass();
or
MyClass::staticMethodCall();
it will automatically call the __autoload function that you defined earlier.
__autoload('MyClass');