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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
InviS
Отправлено: 13 Мая, 2011 - 11:51:30
Post Id


Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Подскажите, пожалуйста, можно ли из класса как-то узнавать директорию файла, в которой создан объект класса? или это нужно только передавать.

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

Сейчас я организовал это через метод setDir в который я передаю __DIR__ - можно ли это сделать иначе?
 
 Top
Мелкий Супермодератор
Отправлено: 13 Мая, 2011 - 13:06:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Лучше ознакомьтесь с такой удобной штукой как __autoload и адресовать классы по чёткой иерархии.


-----
PostgreSQL DBA
 
 Top
Stierus Супермодератор
Отправлено: 13 Мая, 2011 - 13:18:54
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




InviS, опиши задачу ... твое решение поставленной задачи (иклуд разных вариантов одноименных классов из разных директорий, инклуд еще и внутри классов, причем тоже зависящий от директорий) - явное костыляние, уже видно, что ты получишь немаленькую кучку проблем с этим.
 
My status
 Top
InviS
Отправлено: 13 Мая, 2011 - 13:27:42
Post Id


Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Задача:
У меня есть 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__ то это, по-видимому, решит мою проблему и мне не нужно будет передавать даже директории.

И мне было интересно, можно ли в самом классе сделать процедуру, которая узнает директорию файла, в которой был создан объект этого класса.. Вот...

(Отредактировано автором: 13 Мая, 2011 - 13:28:42)

 
 Top
Stierus Супермодератор
Отправлено: 13 Мая, 2011 - 13:47:53
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




обычно ориентируются на рутовую директорию, иногда на текущую директорию (директорию, в которой лежит сам файл) - для этого используют dirname(__FILE__)
(Добавление)
В любом случае должен быть объект, содержащий конфигурационную информацию (пути к картинкам, урлы, вот такой путь к директории вьюх, возможно, параметры для соединений с бд, настройкой дебага и тд) такие вещи не передаются в параметрах, а берутся из одного общего места на всем сайте.
 
My status
 Top
InviS
Отправлено: 13 Мая, 2011 - 13:50:22
Post Id


Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Но это как бы библиотека.. я не знаю куда я ее могу засунуть)) ну или не хочу к этому привязываться. __FILE__ вернет мне имя файла... И это будет вместе с каталогом... А не известно где оно все лежит относительно файла index.php

И мне хотелось бы это узнавать... Но по ходу нельзя так)
 
 Top
Stierus Супермодератор
Отправлено: 13 Мая, 2011 - 14:51:41
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




dirname(__FILE__) вернет тебе полный путь к директории, в которой лежит текущий файл, запускаешь его в индексе, результат заносишь в конфиг-класс и дальше пользуешься отовсюду (ты же знаешь структуру своих каталогов, сможешь добавить необходимую часть пути к директории с шаблонами к полному пути к рутовой директории)
 
My status
 Top
InviS
Отправлено: 13 Мая, 2011 - 14:54:44
Post Id


Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Stierus, конфиг-класс.. Хм, это интересно =) Спасибо, попробую так хранить.

А что вы имели в виду под "заносишь в конфиг-класс" - каким образом этол лучше всего делать?

(Отредактировано автором: 13 Мая, 2011 - 14:55:42)

 
 Top
Stierus Супермодератор
Отправлено: 13 Мая, 2011 - 15:01:48
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




он должен быть статическим, как ты, наверное, понял Улыбка
 
My status
 Top
InviS
Отправлено: 13 Мая, 2011 - 15:03:48
Post Id


Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Stierus, ну это я понял, а переменные я тоже назначаю для каждого проекта, да? или это какое-то кросс-проектное хранилище? Улыбка
 
 Top
EuGen Администратор
Отправлено: 13 Мая, 2011 - 15:14:11
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Простецкий пример класса для работы с общим файлом настроек здесь:
http://forum.php.su/topic.php?fo...=62&topic=98
Секция "Модели", первый же пример.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Stierus Супермодератор
Отправлено: 13 Мая, 2011 - 16:15:22
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




много разных реализаций, есть вот у коханы http://docs.kohanaphp.com/core/config, но мне он не очень нравится. есть у зенда http://framework[dot]zend[dot]com/manual[dot][dot][dot]f_operation[dot]html - этот поинтереснее, но разбираться дольше. У нас самописный на массивах и геттерах-сеттерах к нему
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB