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]   

> Без описания
Slavenin
Отправлено: 25 Мая, 2011 - 19:18:18
Post Id



Посетитель


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


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




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

попытался написать функцию автоподгрузки классов:

PHP:
скопировать код в буфер обмена
  1. function LoadClass($ClassName)
  2.   {
  3.  
  4.       $dir = "http://localhost/classes/";
  5.       if(file_exists($dir .$ClassName))
  6.       {
  7.          return require_once($dir .$ClassName);
  8.       }
  9.       return 'не работает';
  10.    }


функция всегда возвращает не работает. в чем проблема понять не могу. если просто перейти по формирующемуся адресу, то попадаю в нужный файл. а функция file_exists всегда возвращает false

даже если исключить функцию file_exists файл всеравно не подключается

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

 
 Top
Champion Супермодератор
Отправлено: 25 Мая, 2011 - 19:27:50
Post Id



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


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


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




не надо инклюдить код по http. Вы работаете с файловой системой
 
 Top
Slavenin
Отправлено: 25 Мая, 2011 - 19:29:40
Post Id



Посетитель


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


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




да я б и не стал так делать, но с локальными адресами возникают проблемы которые я не могу обойти. в частности как я говорил выше с подключением файлов с классами при создании объекта в разных по вложенности директориях
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Мая, 2011 - 19:33:58
Post Id



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


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


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




Slavenin пишет:
возникают проблемы которые я не могу обойти
Какие?
 
 Top
Slavenin
Отправлено: 25 Мая, 2011 - 19:39:12
Post Id



Посетитель


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


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




Цитата:
есть основной класс расположенный в папке с классами некоторые поля у него инициализируются объектами других классов. при подключении его из разных директорий возникает проблема инициализации полей, которые являются объектами других классов, так как php их попросту не находит


приведу пример

есть классы
PHP:
скопировать код в буфер обмена
  1.  class a
  2. {
  3.   var $a;
  4.  
  5.  function LoadClass($ClassName)
  6.   {
  7.      $dir = "cl/" .$ClassName;
  8.      require_once($dir);
  9.    }
  10. }
  11.  
  12.  class b
  13. {
  14.   var $b;
  15.  functin b()
  16.  {
  17.   $this->a = new a();
  18.  }
  19. }

оба файла лежат в одной папке cl , расположенной в корневой дирректории.

теперь если подключить класс в корневой директории с помощью функции загрузки LoadClass, то все пройдет хорошо, но если эту функцию запустить из класса a заинклюденного в одной из папок директории, то путь подгрузки должен измениться на


в этом собственно и заключается проблема

(Отредактировано автором: 25 Мая, 2011 - 19:59:50)

 
 Top
EuGen Администратор
Отправлено: 25 Мая, 2011 - 20:17:45
Post Id


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


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


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




Посмотрите здесь ветке уроков урок №19.
Там есть пример функции __autoload
Организуйте свои классы подобным образом и проблема будет решена раз и навсегда.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
komprenda
Отправлено: 25 Мая, 2011 - 21:04:40
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


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




Slavenin пишет:
Всем доброго времени суток. возникла следующая проблема. Есть дирректория с файлами классов, есть директории других файлов. есть основной класс расположенный в папке с классами некоторые поля у него инициализируются объектами других классов. при подключении его из разных директорий возникает проблема инициализации полей, которые являются объектами других классов, так как php их попросту не находит.

попытался написать функцию автоподгрузки классов:

PHP:
скопировать код в буфер обмена
  1. function LoadClass($ClassName)
  2.   {
  3.  
  4.       $dir = "http://localhost/classes/";
  5.       if(file_exists($dir .$ClassName))
  6.       {
  7.          return require_once($dir .$ClassName);
  8.       }
  9.       return 'не работает';
  10.    }


функция всегда возвращает не работает. в чем проблема понять не могу. если просто перейти по формирующемуся адресу, то попадаю в нужный файл. а функция file_exists всегда возвращает false

даже если исключить функцию file_exists файл всеравно не подключается


PHP:
скопировать код в буфер обмена
  1. function __autoload($class) {
  2.     $filename = "classes/{$class}.php";
  3.     if (file_exists($filename)) {
  4.         require_once($filename);
  5.     }
  6. }
 
 Top
Champion Супермодератор
Отправлено: 25 Мая, 2011 - 21:13:49
Post Id



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


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


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




Проблема с относительными путями что ли? Есть еще абсолютные пути - от /.
Или относительные от одного места - от DOCUMENT_ROOT - от них и отплясывайте
 
 Top
Stierus Супермодератор
Отправлено: 26 Мая, 2011 - 10:44:27
Post Id



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


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


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




ну так вы подгружайте по путям относительно файла, в котором лежит файл подгрузчика (он никогда не меняется) dirname(__FILE__)
 
My status
 Top
Slavenin
Отправлено: 27 Мая, 2011 - 17:44:39
Post Id



Посетитель


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


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




проблема решилась прочтением статьи http://www.phpfaq[dot]ru/paths и использованием $_SERVER['DOCUMENT_ROOT'], благодарю всех, кто откликнулся Улыбка
 
 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