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]   

> Без описания
imedia
Отправлено: 30 Октября, 2015 - 22:22:03
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Июль 2015  


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




Что вызывает конфликт и как правильно ?

Fatal error: Uncaught exception 'LogicException' with message 'Class "Main\UsersController\UsersController\Main" not found in "/var/www/clients/client1/web28/web/protected/Main/UsersController/UsersController/Main.php"' in /var/www/clients/client1/web28/web/protected/bootstrap.php:15 Stack trace: #0 [internal function]: {closure}('Main\\UsersContr...') #1 /var/www/clients/client1/web28/web/protected/Main/UsersController/UsersController.php(4): spl_autoload_call('Main\\UsersContr...') #2 /var/www/clients/client1/web28/web/protected/bootstrap.php(20): require('/var/www/client...') #3 /var/www/clients/client1/web28/web/index.php(3): require('/var/www/client...') #4 {main} thrown in /var/www/clients/client1/web28/w eb/protected/bootstrap.php on line 15
PHP:
скопировать код в буфер обмена
  1.  
  2. namespace Main\UsersController\UsersController;
  3. class UsersController extends Main {
  4.  
  5.         public function __construct()
  6.         {
  7.         parent:: __construct();
  8.         $this->load->helper('url');
  9.         }
  10.  


PHP:
скопировать код в буфер обмена
  1.  
  2. namespace Main\UsersController\Main;
  3. class Main {
  4.  
  5. public function _construct(){
  6. print('Main_construct');
  7. }
  8.  
  9.  

bootstrap
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. ini_set('display_errors', 'on');
  4.  
  5. spl_autoload_register(function ($class) {
  6.  
  7.     $path = __DIR__ . '/' . str_replace('\\', '/', $class) . '.php';
  8.  
  9.     if (is_file($path)) {
  10.         require $path;
  11.         return;
  12.     }
  13.  
  14.     throw new \LogicException(sprintf('Class "%s" not found in "%s"', $class, $path));
  15. });
  16. require __DIR__ . '/Main/Main.php';
  17. require __DIR__ . '/func.php';
  18. require __DIR__ . '/AppController.php';
  19. require __DIR__ . '/Main/UsersController.php';
  20.  
  21.  

(Отредактировано автором: 31 Октября, 2015 - 14:11:54)

 
 Top
Мелкий Супермодератор
Отправлено: 30 Октября, 2015 - 22:39:04
Post Id



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


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


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




Никакого конфликта.
У вас в этих фрагментах кода показан класс \UsersController\UsersController требующий наследование от \UsersController\Main
И показан класс \Main\Main


-----
PostgreSQL DBA
 
 Top
imedia
Отправлено: 30 Октября, 2015 - 22:41:01
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Июль 2015  


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




А что тогда эта ошибка говорит? простите отредактировал фрагменты кода. о чем же все таки эта ошибка

(Отредактировано автором: 30 Октября, 2015 - 23:12:24)

 
 Top
Мелкий Супермодератор
Отправлено: 30 Октября, 2015 - 23:41:02
Post Id



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


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


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




Ну а теперь показан класс \Main\UsersController\UsersController, который должен наследоваться от \Main\UsersController\Main
И класс \Main\Main. Не ощущаете, что это совсем не \Main\UsersController\Main?

Логика та же самая, что и при абсолютных/относительных путях по файловой системе.


-----
PostgreSQL DBA
 
 Top
imedia
Отправлено: 31 Октября, 2015 - 14:10:31
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Июль 2015  


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




Что то я все равно не понимаю, сейчас я тоже изменил как Вы сказали, Мелкий
но та же ошибка
Fatal error: Uncaught exception 'LogicException' with message 'Class "Main\UsersController\UsersController\Main" not found in "/var/www/clients/client1/web28/web/protected/Main/UsersController/UsersController/Main.php"' in /var/www/clients/client1/web28/web/protected/bootstrap.php:15 Stack trace: #0 [internal function]: {closure}('Main\\UsersContr...') #1 /var/www/clients/client1/web28/web/protected/Main/UsersController/UsersController.php(4): spl_autoload_call('Main\\UsersContr...') #2 /var/www/clients/client1/web28/web/protected/bootstrap.php(20): require('/var/www/client...') #3 /var/www/clients/client1/web28/web/index.php(3): require('/var/www/client...') #4 {main} thrown in /var/www/clients/client1/web28/w eb/protected/bootstrap.php on line 15
 
 Top
Faraon-san
Отправлено: 31 Октября, 2015 - 14:51:57
Post Id



Посетитель


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


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




находясь в пространстве Main\UsersController\UsersController , вы пытаетесь унаследовать от класса Main, который находиться в другом пространстве имен, т.е. в данном случае нужно делать так:
PHP:
скопировать код в буфер обмена
  1. class UsersController extends Main\UsersController\Main\Main {}


P.S. поправьте если не так, не работал с пространством имен, но по логике как то так наверно ))

(Отредактировано автором: 31 Октября, 2015 - 14:53:16)

 
 Top
imedia
Отправлено: 31 Октября, 2015 - 15:24:39
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Июль 2015  


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




Я вот так делаю и ошибка по вашей логикеFaraon-san
Не могу догнать этой структуры, вроде бы как вы сказали
PHP:
скопировать код в буфер обмена
  1.  
  2. namespace Main\UsersController;
  3.  
  4. class UsersController extends Main\UsersController\Main {  
  5.  

PHP:
скопировать код в буфер обмена
  1.  
  2. namespace Main\UsersController;
  3. class Main {
  4.  

PHP:
скопировать код в буфер обмена
  1.  
  2. spl_autoload_register(function ($class) {
  3.  
  4.     $path = __DIR__ . '/' . str_replace('\\', '/', $class) . '.php';
  5.  
  6.     if (is_file($path)) {
  7.         require $path;
  8.         return;
  9.     }
  10.  
  11.     throw new \LogicException(sprintf('Class "%s" not found in "%s"', $class, $path));
  12. });
  13. require __DIR__ . '/Main/UsersController/Main.php';
  14. require __DIR__ . '/func.php';
  15. require __DIR__ . '/AppController.php';
  16. require __DIR__ . '/Main/UsersController/UsersController.php';
  17.  

Fatal error: Uncaught exception 'LogicException' with message 'Class "Main\UsersController\Main\UsersController\Main" not found in "/var/www/clients/client1/web28/web/protected/Main/UsersController/Main/UsersController/Main.php"' in /var/www/clients/client1/web28/web/protected/bootstrap.php:15 Stack trace: #0 [internal function]: {closure}('Main\\UsersContr...') #1 /var/www/clients/client1/web28/web/protected/Main/UsersController/UsersController.php(4): spl_autoload_call('Main\\UsersContr...') #2 /var/www/clients/client1/web28/web/protected/bootstrap.php(20): require('/var/www/client...') #3 /var/www/clients/client1/web28/web/index.php(3): require('/var/www/client...') #4 {main} thrown in /var/www/clients/client1/web28/w eb/protected/bootstrap.php on line 15
 
 Top
Мелкий Супермодератор
Отправлено: 31 Октября, 2015 - 16:29:20
Post Id



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


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


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




imedia пишет:
изменил как Вы сказали, Мелкий

Я пока не говорил ничего менять. Я описываю полное имя классов в пространстве имён, которые используются в вашем коде.
И весьма не случайно здесь пишу \Main\Main вместо Main\Main. Эквивалентны эти две записи только в корневом пространстве имён.
В корневом пространстве имён ссылка на класс Main приводит к классу \Main, ссылка из пространства имён Main приведёт к \Main\Main, из пространства имён Main\Controller класс будет уже \Main\Controller\Main и всё это три совершенно разных класса.


-----
PostgreSQL DBA
 
 Top
Faraon-san
Отправлено: 31 Октября, 2015 - 22:55:17
Post Id



Посетитель


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


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




спасибо Мелкий, нужно указать корень пространства имен, т.е.:
PHP:
скопировать код в буфер обмена
  1. class UsersController extends \Main\UsersController\Main

(Отредактировано автором: 31 Октября, 2015 - 22:55:41)

 
 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