Демонстрируют ли созданные классы относительные пути в ООП?

Я ломаю голову над ООП и пространством имен, и я думаю, что это мешает моему пониманию абсолютных и относительных путей. Учитывая следующий простой каталог:

X +
  A +
    B +
      FileC
    FileB

В файле B есть класс, который содержит вызов file_exists($this->filepath) в своем конструкторе. Он ищет FileC в каталоге B, который находится в том же каталоге, что и FileB.

$filepath, который, как я предполагал, будет работать, это B/FileC, но он возвращает false. Затем я попробовал ../B/FileC тоже ложь. Затем я пытаюсь ..A/B/FileC. Опять ложь. Мне нужно выйти на X, чтобы узнать правду: ../X/A/B/FileC

Очевидно, мое понимание здесь отсутствует. Я на 80% уверен, что пространство имен не имеет отношения к file_exists. Итак, мое следующее предположение: влияет ли вызывающий объект на реальный путь к файлу? Это означает, что если класс FileB создается из класса, определенного в другой папке в том же каталоге, что и A, определяет ли этот класс относительный путь?

Извините за вопрос новичка.


person PHPeer    schedule 26.05.2013    source источник
comment
Я думаю, что это не имеет ничего общего с ООП, но у меня также были проблемы со структурой относительных каталогов. Единственный способ, которым я смог решить эту проблему, - использовать абсолютные пути.   -  person Voitcus    schedule 27.05.2013


Ответы (1)


Это не имеет ничего общего с ООП...

file_exists работает не по вашему текущему рабочему пути, это означает, что вам нужно вызвать

dirname(__FILE__), чтобы понять ваш текущий путь и понять, где находятся файлы, к которым вы пытаетесь получить доступ, по отношению к текущему рабочему пути. Тот факт, что вы используете класс A или файл B, не означает, что вы можете предположить, что работаете в этом каталоге.

Речь идет только о файлах и путях в php.

Я думаю, что ваш текущий каталог во многом зависит от того, какой файл вы вызываете и из какого каталога, а не столько от подключаемых файлов, которые, как я предполагаю, вы используете.

Как насчет использования абсолютных путей (конечно, без жесткого кодирования)?

$path = dirname(__FILE__) . '/path/to/your/A/B/C'
person Dory Zidon    schedule 26.05.2013
comment
Вот как я продвигаюсь вперед, но надеялся понять, почему простой путь не работает. - person PHPeer; 27.05.2013
comment
попробуйте также поиграть с php.net/manual/en/function.realpath.php это, возможно, поможет вам лучше понять вашу файловую структуру. - person Dory Zidon; 27.05.2013