Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Можно ли как-то внутри класса узнать директорию файла, в которой создан объект класса?
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Можно ли как-то внутри класса узнать директорию файла, в которой создан объект класса?

Страниц (1): [1]
 

1. InviS - 13 Мая, 2011 - 11:51:30 - перейти к сообщению
Подскажите, пожалуйста, можно ли из класса как-то узнавать директорию файла, в которой создан объект класса? или это нужно только передавать.

Поясню. Мне внутри класса нужно сделать require_once - но объекты будут созданы в разных местах, и хотелось бы указывать директорию относительно их...

Сейчас я организовал это через метод setDir в который я передаю __DIR__ - можно ли это сделать иначе?
2. Мелкий - 13 Мая, 2011 - 13:06:37 - перейти к сообщению
Лучше ознакомьтесь с такой удобной штукой как __autoload и адресовать классы по чёткой иерархии.
3. Stierus - 13 Мая, 2011 - 13:18:54 - перейти к сообщению
InviS, опиши задачу ... твое решение поставленной задачи (иклуд разных вариантов одноименных классов из разных директорий, инклуд еще и внутри классов, причем тоже зависящий от директорий) - явное костыляние, уже видно, что ты получишь немаленькую кучку проблем с этим.
4. InviS - 13 Мая, 2011 - 13:27:42 - перейти к сообщению
Задача:
У меня есть header и footer для страниц (хранятся в отдельном файле)
И есть класс, который формирует странички.
Формирование происходит через ob_start() и ob_get_clean() - после чего все что было "заинклужено" выводится в нужное место.

Сейчас индекс файл у меня выглядит так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.     session_start();
  4.        
  5.     /** добавляем папки в include_path */
  6.     $path = array('lib','dll','views');
  7.     $path = get_include_path().PATH_SEPARATOR.implode(PATH_SEPARATOR,$path);
  8.     set_include_path($path);
  9.        
  10.     require_once 'class.page.php';
  11.     require_once 'class.controller.php';
  12.  
  13.     $page = new page(Page :: $XHTML);
  14.     $controller = new controller();
  15.  
  16.     $page -> setDir(__DIR__);
  17.     $page -> setHeader('views/_header.phtml') -> showHeader();
  18.     $page -> setFooter('views/_footer.phtml') -> showFooter();
  19.        
  20.     $controller -> getView();
  21.         if (is_file($controller -> view)){
  22.                 require_once($controller -> view);
  23.         } else {
  24.                 require_once "views/404.phtml";
  25.         }
  26. ?>
  27.  


Вот я хотел избавиться от этого ненужного передавания __DIR__.
В принципе, если я буду добавлять в include_path не просто каталоги, а каталоги с полным путем относительно __DIR__ то это, по-видимому, решит мою проблему и мне не нужно будет передавать даже директории.

И мне было интересно, можно ли в самом классе сделать процедуру, которая узнает директорию файла, в которой был создан объект этого класса.. Вот...
5. Stierus - 13 Мая, 2011 - 13:47:53 - перейти к сообщению
обычно ориентируются на рутовую директорию, иногда на текущую директорию (директорию, в которой лежит сам файл) - для этого используют dirname(__FILE__)
(Добавление)
В любом случае должен быть объект, содержащий конфигурационную информацию (пути к картинкам, урлы, вот такой путь к директории вьюх, возможно, параметры для соединений с бд, настройкой дебага и тд) такие вещи не передаются в параметрах, а берутся из одного общего места на всем сайте.
6. InviS - 13 Мая, 2011 - 13:50:22 - перейти к сообщению
Но это как бы библиотека.. я не знаю куда я ее могу засунуть)) ну или не хочу к этому привязываться. __FILE__ вернет мне имя файла... И это будет вместе с каталогом... А не известно где оно все лежит относительно файла index.php

И мне хотелось бы это узнавать... Но по ходу нельзя так)
7. Stierus - 13 Мая, 2011 - 14:51:41 - перейти к сообщению
dirname(__FILE__) вернет тебе полный путь к директории, в которой лежит текущий файл, запускаешь его в индексе, результат заносишь в конфиг-класс и дальше пользуешься отовсюду (ты же знаешь структуру своих каталогов, сможешь добавить необходимую часть пути к директории с шаблонами к полному пути к рутовой директории)
8. InviS - 13 Мая, 2011 - 14:54:44 - перейти к сообщению
Stierus, конфиг-класс.. Хм, это интересно =) Спасибо, попробую так хранить.

А что вы имели в виду под "заносишь в конфиг-класс" - каким образом этол лучше всего делать?
9. Stierus - 13 Мая, 2011 - 15:01:48 - перейти к сообщению
он должен быть статическим, как ты, наверное, понял Улыбка
10. InviS - 13 Мая, 2011 - 15:03:48 - перейти к сообщению
Stierus, ну это я понял, а переменные я тоже назначаю для каждого проекта, да? или это какое-то кросс-проектное хранилище? Улыбка
11. EuGen - 13 Мая, 2011 - 15:14:11 - перейти к сообщению
Простецкий пример класса для работы с общим файлом настроек здесь:
http://forum.php.su/topic.php?fo...=62&topic=98
Секция "Модели", первый же пример.
12. Stierus - 13 Мая, 2011 - 16:15:22 - перейти к сообщению
много разных реализаций, есть вот у коханы http://docs.kohanaphp.com/core/config, но мне он не очень нравится. есть у зенда http://framework[dot]zend[dot]com/manual[dot][dot][dot]f_operation[dot]html - этот поинтереснее, но разбираться дольше. У нас самописный на массивах и геттерах-сеттерах к нему

 

Powered by ExBB FM 1.0 RC1