在OOP中,实例化的类指定相对路径


Do instantiated classes dictate relative paths in OOP?

我正在了解OOP和名称空间,我认为它混淆了我对绝对路径和相对路径的理解。给定以下简单目录:

X +
  A +
    B +
      FileC
    FileB

文件B有一个类,在它的构造函数中包含一个file_exists($this->filepath)调用。它在B目录中查找FileC,该目录与FileB在同一个目录中。

我认为行得通的$filepath是B/FileC,但它返回false。然后我尝试../B/FileC也假。然后我试试..A/B/FileC。再一次假。我必须去X才能得到true: ../X/A/B/FileC

显然,我的理解在这里是错误的。我有80%的把握认为名称空间与file_exists无关。所以我的下一个猜想是——调用对象会影响相对文件路径吗?意思是,如果FileB的类是从在与A相同目录的另一个文件夹中定义的类中实例化的,那么该类是否指示相对路径?

这与OOP没有任何关系…

file_exists从当前运行路径运行,这意味着您需要调用

dirname(__FILE__)来了解您当前的路径,并了解您试图访问的文件相对于当前运行路径的位置。仅仅因为你正在使用类A或文件B,并不意味着你可以假设你在那个目录下运行。

这只是关于php中的文件和路径。

我认为你的当前目录很大程度上取决于你从哪个目录调用哪个文件,而不是我认为你正在使用的包含文件。

使用绝对路径(当然不需要硬编码)如何?

$path = dirname(__FILE__) . '/path/to/your/A/B/C'