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 » » Объектно-ориентированное программирование » Проблема при создании динамического класса при использовании пространственных имен

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

1. qtk - 18 Августа, 2013 - 22:32:47 - перейти к сообщению
Такая проблемка, пытаюсь создать экземпляр класса. Имя класса получаю динамически, класс находится в пространстве имен classes\app\controller.
Все это вызывается во фронт контроллере.
$class-имя класса.
Во фронт контроллере сделал псевдоним:

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

Спасибо за понимание и ответ!!!
2. Panoptik - 18 Августа, 2013 - 22:51:16 - перейти к сообщению
экземпляры классов создаются оператором new
3. Саныч - 18 Августа, 2013 - 23:47:11 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. use classes\app\controller as APP;
  2. $obj = new APP;
4. qtk - 19 Августа, 2013 - 07:19:31 - перейти к сообщению
Просто опечатался тут, извените!
5. EuGen - 19 Августа, 2013 - 08:12:08 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $sName = '\\APP\\'.$class;
  2. $rObj  = new $sClass;

?
6. armancho7777777 - 19 Августа, 2013 - 11:06:00 - перейти к сообщению
EuGen, опечатались.
2 слеша на конце.
7. EuGen - 19 Августа, 2013 - 11:27:37 - перейти к сообщению
armancho7777777 пишет:
$sName = '\APP\\' . $class;

Двойной слеш для определённости должен быть и в начале, вероятно, форум некорректно отобразил. Исправлено.
8. caballero - 19 Августа, 2013 - 12:10:11 - перейти к сообщению
в начале не надо
а в конце почему то надо
сам с таким столкнулся недавно - перевел все в двойные кавички где уже четко и без вариантов
9. EuGen - 19 Августа, 2013 - 12:38:38 - перейти к сообщению
caballero
EuGen пишет:
для определённости

- имеется ввиду единообразие. Работать будет и с одиночным, но, чтобы не путать, вспоминая, когда возможен одиночный, а когда - нет, проще указать двойной.
10. qtk - 19 Августа, 2013 - 17:01:28 - перейти к сообщению
EuGen пишет:
$sName = '\\APP\\'.$class;
$rObj  = new $sName;

не работает!
Псевдоним не преобразуется и лоадер ищет фаил в \APP\, а не в classes\app\controller
11. caballero - 19 Августа, 2013 - 17:13:04 - перейти к сообщению
он ищет там где ты ему задал
хочешь искать в текущем пространствке имен - убери слеш в начале

а еще лучше всегда задавай полное пространство
на то там и алиасы чтобы сокращать
12. qtk - 19 Августа, 2013 - 17:29:52 - перейти к сообщению
caballero пишет:
хочешь искать в текущем пространствке имен - убери слеш в начале
скрипт не понимает что это алиас APP
13. Саныч - 19 Августа, 2013 - 17:36:41 - перейти к сообщению
qtk, полность код выложите, как пробовали
14. qtk - 19 Августа, 2013 - 17:56:41 - перейти к сообщению
примерно так:
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. ?>
15. caballero - 19 Августа, 2013 - 18:08:17 - перейти к сообщению
AppC там вообще не нужно в имени класса
(Добавление)
у вас в действительности свалено в один файл классы пространства имен автолоад и т.д. ?

 

Powered by ExBB FM 1.0 RC1