Включение файла из класса

У меня есть следующая файловая структура:

www
|-- MyLibrary
|    |-- Example.class.php 
|    +-- someDirectory
|         +-- somefile.php
|-- other_file.php
+-- another_file.php

Я хочу включить файл из класса:

<?php
    class Example {
        public function test(){
            include "someDirectory/somefile.php";
        }
    }
?>

Это вызовет ошибку, потому что он включает другой файл/каталог, чем класс. Поскольку я пишу библиотеку, я не знаю каталог, в котором будут файлы, и путь от файла, создающего экземпляр, и «somefile.php».

Итак, мой вопрос: есть ли способ включить 'somefile.php' из 'Example.class.php'?


person Marnix Bouhuis    schedule 17.03.2016    source источник
comment
Вы можете использовать систему автозагрузчика php, которая значительно упрощает такие проблемы. php.net/manual/en/language.oop5.autoload.php Вы также можете использовать константу, содержащую абсолютный путь к вашему приложению, который вы добавляете перед включенным путем.   -  person kerwan    schedule 17.03.2016


Ответы (2)


Вы можете использовать константу __DIR__ в PHP

Каталог файла. Если используется внутри включения, возвращается каталог включенного файла. Это эквивалентно dirname(__FILE__). Это имя каталога не имеет завершающей косой черты, если только оно не является корневым каталогом.

(https://secure.php.net/manual/en/language.constants.predefined.php)

Итак, это будет:

<?php
    class Example {
        public function test(){
            include __DIR__."/../someDirectory/somefile.php";
        }
    }
?>

При этом вы используете относительный путь к файлу.

person Matthijs    schedule 17.03.2016

Вы можете получить текущий путь, по которому находится файл.

В структуре, с которой вы работаете, вы можете переписать класс Example следующим образом:

<?php
    class Example {
        public function test(){
            include __DIR__ . DIRECTORY_SEPARATOR . "someDirectory/somefile.php";
        }
    }
?>

Константа __DIR__ даст вам текущую папку.

person Blaatpraat    schedule 17.03.2016