Как работают ссылки на файлы в объектах PHP? - PullRequest
1 голос
/ 22 апреля 2010

Я пытаюсь создать объект PHP, который может при необходимости загружать объекты в другие файлы. Моя проблема в том, что, когда я ссылаюсь на файлы на основе расположения файла для определения класса, он не может найти файлы. Итак, структура файла:

/ test.php

/ os / os.php (расширяет ядро)

/ os / kernel.php

/ OS / библиотеки / lib1.php

/ OS / библиотеки / lib2.php

/ OS / библиотеки / lib3.php

В kernel.php библиотеки упоминаются как «library / lib1.php». Если я создаю объект "os" в Test.php. Файлы lib не найдены.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2010

Используйте хорошее соглашение об именах для ваших классов, include_path и используйте spl_autoload.

Например:

Назовите ваши классы так: класс Os Ядро класса Класс Libraries_Lib1 ...

Зарегистрируйте свой включаемый путь

set_include_path(implode(PATH_SEPARATOR, array(
    realpath('os/'),
    get_include_path(),
)));
spl_autoload_register("autoload");

и использовать автозагрузку:

function autoload($className) {
   $name = implode("/", explode("_", $className));
   require_once(strtolower($name) . ".php");
}
0 голосов
/ 22 апреля 2010

Я думаю, что если вы укажете какой-либо относительный путь (а не просто имя файла или абсолютный путь), PHP попытается включить его относительно $_SERVER['SCRIPT_FILENAME'] (основной скрипт, который был запущен), и, следовательно, вы получите противоречивые результаты.

Вы можете определить абсолютный путь где-нибудь в файле, который, как вы знаете, будет всегда включен, например:

<?php
//e.g. this could be file os/kernel.php
//define absolute path to libraries dir
define('LIBRARY_PATH', dirname(__FILE__) . '/libraries');

А затем в другом месте (в kernel.php и других) используйте его, когдаВы включаете другой файл:

<?php
include LIBRARY_PATH . '/lib1.php';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...