2013-05-26 2 views
1

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

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. Итак, моя следующая догадка - влияет ли вызывающий объект на путь файла realtive? Значение, если класс FileB создается из класса, определенного в другой папке в том же каталоге, что и A, определяет ли этот класс относительный путь?

Извините за новый вопрос.

+0

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

ответ

1

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

file_exists убегает текущую беговую дорожку, это означает, что вы должны вызвать

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

Речь идет только о файлах и дорожках в php.

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

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

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

Вот как я сейчас продвигаюсь вперед, но надеялся понять, почему простой путь не работает. – PHPeer

+0

см. Мое редактирование. это имеет смысл сейчас? –

+0

попробуйте также поиграть с http://php.net/manual/en/function.realpath.php, что может помочь вам лучше понять вашу файловую структуру .. –

Смежные вопросы