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 :: Подгрузка из разных папок spl_autolader

 PHP.SU

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


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

> Без описания
Deoman
Отправлено: 10 Августа, 2014 - 10:40:54
Post Id


Новичок


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


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




CODE (htmlphp):
скопировать код в буфер обмена
  1. spl_autoload_register(function ($class) {
  2.                 $controller = strpos($class, 'controller');
  3.                 $widget = strpos($class, 'widget');
  4.                 if ( $controller !== false ) {
  5.                         include PATH . 'Controllers/' . $class . '.php';
  6.                 } elseif ( $widget !== false ) {
  7.                         include PATH . 'Controllers/widgets/' . $class . '.php';
  8.                 } else {
  9.                         include  PATH . 'Core/Classes/class.' . $class . '.php';
  10.                 }
  11.         });


Например new controllerIndex все равно почему то ищет класс в Core/Classes/, хотя должен в Controllers/
 
 Top
Object
Отправлено: 10 Августа, 2014 - 11:08:34
Post Id


Гость


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


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




А не потому ли что подстрока 'controller' в строке 'controllerIndex' встречается на 0 (нулевой) позиции и соответственно переменная $controller == 0, тоесть тот же 'false'.

Попробуйте так:

PHP:
скопировать код в буфер обмена
  1. spl_autoload_register(function ($class) {
  2.                 $controller = null;
  3.                 $widget = null;
  4.                 $controller = strpos($class, 'controller');
  5.                 $widget = strpos($class, 'widget');
  6.                 if (!is_null($controller)) {
  7.                         include PATH . 'Controllers/' . $class . '.php';
  8.                 } elseif (!is_null($widget)) {
  9.                         include PATH . 'Controllers/widgets/' . $class . '.php';
  10.                 } else {
  11.                         include  PATH . 'Core/Classes/class.' . $class . '.php';
  12.                 }
  13.         });
 
 Top
Deoman
Отправлено: 10 Августа, 2014 - 12:46:13
Post Id


Новичок


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


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




А можно ли как-нибудь сделать на подобии
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. spl_autoload_register(function ($class) {  // $class - controller.Index или widget.Login
  3.                 $class = explode('.', $class);
  4.                 switch ($class[0]) {
  5.                         case 'controller':
  6.                                 include PATH . 'Controllers/controller.' . $class[1] . '.php';
  7.                                 break;
  8.  
  9.                         case 'widget':
  10.                                 include PATH . 'Controllers/widgets/widget.' . $class[1] . '.php';
  11.                                 break;
  12.                        
  13.                         default:
  14.                                 include  PATH . 'Core/Classes/class.' . $class . '.php';
  15.                                 break;
  16.                 }
  17.         });
  18.  


Когда создаешь экземпляр $controller = new controller.Index(); Php очень странно возмущается. Есть ли какие-нибудь ограничения на использование такой точки в php?
 
 Top
Object
Отправлено: 10 Августа, 2014 - 14:22:36
Post Id


Гость


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


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




Так делайте составное название класса через знак подчеркивания "_"

PHP:
скопировать код в буфер обмена
  1. $controller = new controller_Index();


И соответственно:



P.S. Кстати в примере выше я немного поспешил и тоже ошибся, там переменные всегда будут менять значение с null на число, поэтому будет срабатывать первая ветка в if.

(Отредактировано автором: 10 Августа, 2014 - 14:29:27)

 
 Top
Мелкий Супермодератор
Отправлено: 10 Августа, 2014 - 20:31:42
Post Id



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


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


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




Object пишет:
Так делайте составное название класса через знак подчеркивания "_"

Так пользуйтесь, наконец, пространствами имён.

Deoman пишет:
Есть ли какие-нибудь ограничения на использование такой точки в php?

Разумеется. Это же оператор конкатенации.


-----
PostgreSQL DBA
 
 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