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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
qtk
Отправлено: 18 Августа, 2013 - 22:32:47
Post Id


Частый гость


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


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




Такая проблемка, пытаюсь создать экземпляр класса. Имя класса получаю динамически, класс находится в пространстве имен classes\app\controller.
Все это вызывается во фронт контроллере.
$class-имя класса.
Во фронт контроллере сделал псевдоним:

Как дальше объявить экземпляр класса без ошибок, типа:

Спасибо за понимание и ответ!!!

(Отредактировано автором: 19 Августа, 2013 - 07:05:12)

 
 Top
Panoptik
Отправлено: 18 Августа, 2013 - 22:51:16
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




экземпляры классов создаются оператором new

(Отредактировано автором: 18 Августа, 2013 - 22:51:28)



-----
Just do it
 
 Top
Саныч Модератор
Отправлено: 18 Августа, 2013 - 23:47:11
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




PHP:
скопировать код в буфер обмена
  1. use classes\app\controller as APP;
  2. $obj = new APP;


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
qtk
Отправлено: 19 Августа, 2013 - 07:19:31
Post Id


Частый гость


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


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




Просто опечатался тут, извените!
 
 Top
EuGen Администратор
Отправлено: 19 Августа, 2013 - 08:12:08
Post Id


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


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


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




PHP:
скопировать код в буфер обмена
  1. $sName = '\\APP\\'.$class;
  2. $rObj  = new $sClass;

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
armancho7777777 Супермодератор
Отправлено: 19 Августа, 2013 - 11:06:00
Post Id



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


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


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




EuGen, опечатались.
2 слеша на конце.
 
 Top
EuGen Администратор
Отправлено: 19 Августа, 2013 - 11:27:37
Post Id


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


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


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




armancho7777777 пишет:
$sName = '\APP\\' . $class;

Двойной слеш для определённости должен быть и в начале, вероятно, форум некорректно отобразил. Исправлено.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
caballero
Отправлено: 19 Августа, 2013 - 12:10:11
Post Id


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


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


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




в начале не надо
а в конце почему то надо
сам с таким столкнулся недавно - перевел все в двойные кавички где уже четко и без вариантов


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
EuGen Администратор
Отправлено: 19 Августа, 2013 - 12:38:38
Post Id


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


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


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




caballero
EuGen пишет:
для определённости

- имеется ввиду единообразие. Работать будет и с одиночным, но, чтобы не путать, вспоминая, когда возможен одиночный, а когда - нет, проще указать двойной.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
qtk
Отправлено: 19 Августа, 2013 - 17:01:28
Post Id


Частый гость


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


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




EuGen пишет:
$sName = '\\APP\\'.$class;
$rObj  = new $sName;

не работает!
Псевдоним не преобразуется и лоадер ищет фаил в \APP\, а не в classes\app\controller
 
 Top
caballero
Отправлено: 19 Августа, 2013 - 17:13:04
Post Id


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


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


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




он ищет там где ты ему задал
хочешь искать в текущем пространствке имен - убери слеш в начале

а еще лучше всегда задавай полное пространство
на то там и алиасы чтобы сокращать


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
qtk
Отправлено: 19 Августа, 2013 - 17:29:52
Post Id


Частый гость


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


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




caballero пишет:
хочешь искать в текущем пространствке имен - убери слеш в начале
скрипт не понимает что это алиас APP
 
 Top
Саныч Модератор
Отправлено: 19 Августа, 2013 - 17:36:41
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




qtk, полность код выложите, как пробовали


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
qtk
Отправлено: 19 Августа, 2013 - 17:56:41
Post Id


Частый гость


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


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




примерно так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. namespace classes\app\controller;
  3. class Web
  4. {
  5.     public function _get()
  6.         {
  7.             return 200;
  8.         }
  9. }
  10.  
  11. namespace classes;
  12. class Autoload
  13. {  
  14.     public static function runLoader()
  15.         {
  16.         spl_autoload_register(array('self','loaderClass'));
  17.     }
  18.     private static function loaderClass($class)
  19.         {
  20.             $file=ROOT.$class.'.php';
  21.             $file=str_replace(DIRECTORY_SEPARATOR,'/',$file);
  22.                 require_once $file;
  23.     }
  24. }
  25.  
  26. use classes\app\controller as AppC;
  27. define ('ROOT',$_SERVER['DOCUMENT_ROOT'].'/');
  28. Autoload::runLoader();
  29. $class='\\AppC\\'.$_GET['cl'];
  30. $odj=new $class;
  31. echo $obj->_get();
  32. ?>

(Отредактировано автором: 19 Августа, 2013 - 17:58:08)

 
 Top
caballero
Отправлено: 19 Августа, 2013 - 18:08:17
Post Id


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


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


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




AppC там вообще не нужно в имени класса
(Добавление)
у вас в действительности свалено в один файл классы пространства имен автолоад и т.д. ?

(Отредактировано автором: 19 Августа, 2013 - 18:12:11)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB