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. QDef - 10 Декабря, 2011 - 21:51:09 - перейти к сообщению
Подскажите пожалуйста решение или пример автозагрузки классов с разных директорий.
Просто __autoload() не спасает (
2. Panoptik - 10 Декабря, 2011 - 22:08:20 - перейти к сообщению
почитайте ветку уроки PHP
это обрывок из урока 19 о паттернах
автор материала EuGen
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. define('APPLICATION_PATH', realpath(dirname(__FILE__)));
  4. define('VIEWS_PATH', realpath(dirname(__FILE__)).'/Web/Views/');
  5.         APPLICATION_PATH . '/Lib' . PATH_SEPARATOR .
  6.         APPLICATION_PATH . '/Web' . PATH_SEPARATOR .
  7.         APPLICATION_PATH . '/Core' . PATH_SEPARATOR .
  8.         './bbcode/' .PATH_SEPARATOR. get_include_path());
  9. function __autoload($className)
  10. {
  11.     $fname = str_replace('_', '/', $className) . '.php';
  12.     $result = include_once($fname);
  13.     return $result;
  14. }
  15. $router = new Router();
  16. $router->run();
  17. ?>
  18.  
3. caballero - 10 Декабря, 2011 - 22:35:37 - перейти к сообщению
Цитата:
Подскажите пожалуйста решение или пример автозагрузки классов с разных директорий.
Просто __autoload() не спасает (

не спасает от чего? Напиши и зарегистрируй свою функцию авто загрузки или несколько функций. В чем проблемма собственно.
если в том чтобы поставить соответствие имени класса имени файла то namespace - самое удобное решение
4. Okula - 12 Декабря, 2011 - 01:22:17 - перейти к сообщению
Вот как решена эта проблемма в шаблонизаторе Twig
PHP:
скопировать код в буфер обмена
  1. /**
  2.  * Autoloads Twig classes.
  3.  *
  4.  * @package twig
  5.  * @author  Fabien Potencier <fabien@symfony.com>
  6.  */
  7. class Twig_Autoloader
  8. {
  9.     /**
  10.      * Registers Twig_Autoloader as an SPL autoloader.
  11.      */
  12.     static public function register()
  13.     {
  14.         ini_set('unserialize_callback_func', 'spl_autoload_call');
  15.         spl_autoload_register(array(new self, 'autoload'));
  16.     }
  17.  
  18.     /**
  19.      * Handles autoloading of classes.
  20.      *
  21.      * @param  string  $class  A class name.
  22.      *
  23.      * @return boolean Returns true if the class has been loaded
  24.      */
  25.     static public function autoload($class)
  26.     {
  27.         /*if (0 !== strpos($class, 'Twig')) {
  28.             return;
  29.         }*/
  30.  
  31.         if (is_file($file = dirname(__FILE__).'/../'.str_replace(array('_', "\0"), array('/', ''), $class).'.php')) {
  32.             require $file;
  33.         }
  34.     }
  35. }

Как должна быть организована архитектура:
Имя класса должно содержать путь до него, например:
Users_Basa
Такой класс должен располагаться в дирректории Users и файл должен иметь имя Basa.php
Ну и так далее, думаю суть понятна Улыбка
5. caballero - 12 Декабря, 2011 - 02:20:25 - перейти к сообщению
Цитата:
Как должна быть организована архитектура:
Имя класса должно содержать путь до него, например:
Users_Basa
Такой класс должен располагаться в дирректории Users и файл должен иметь имя Basa.php
Ну и так далее, думаю суть понятна

Выглянь в окно - уже 21 век и PHP5.3 с namespace
6. Okula - 12 Декабря, 2011 - 07:51:32 - перейти к сообщению
caballero, это конечно хорошо что PHP 5.3 есть, но не везде он установлен, вот у меня на хосте стоит 5.2.17 и хостер ни в какую не хочет его менять. Сколько бы я ему не говорил об этом.
7. caballero - 12 Декабря, 2011 - 09:58:46 - перейти к сообщению
Долго ли хостера поменять

 

Powered by ExBB FM 1.0 RC1