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 :: Выбрасывается ошибка Argument 1 passed to RequestRegistry::setRequest() must be an instance of mycontrollers\Request

 PHP.SU

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


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

> Без описания
dot
Отправлено: 04 Января, 2017 - 12:44:48
Post Id


Новичок


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


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




Здравствуйте скажите как поправить вот такую вот беду , вот полный текст ошибки Catchable fatal error: Argument 1 passed to RequestRegistry::setRequest() must be an instance of mycontrollers\Request, instance of Request given, called in C:\xampp\htdocs\PhpProject2\mycontrollers\Request.php on line 21 and defined in C:\xampp\htdocs\PhpProject2\RequestRegistry.php on line 46
и дальше сами классы
CODE (htmlphp):
скопировать код в буфер обмена
  1. include_once 'RequestRegistry.php';
  2. class Request {
  3.     private $properties;
  4.     private $feedback = array();
  5.    
  6.     function __construct() {
  7.         $this->init();
  8.         RequestRegistry::setRequest($this);
  9.     }
  10.    
  11.     function init() {
  12.         if(isset($_SERVER['REQUEST_METHOD']))
  13.         {
  14.             $this->properties = $_REQUEST;
  15.             return;
  16.         }
  17.         foreach ($_SERVER['argv'] as $arg) {
  18.             if(strpos($arg, '='))
  19.             {
  20.                 list($key,$val)= explode("=", $arg);
  21.                 $this->setProperty($key,$val);
  22.             }
  23.         }
  24.     }
  25.    
  26.     function getProperty($key){
  27.         if(isset($this->properties[$key]))
  28.         {
  29.             return $this->properties[$key];
  30.         }
  31.     }
  32.    
  33.     function setProperty($key,$val) {
  34.         $this->properties[$key] = $val;
  35.     }
  36.    
  37.     function addFeedback($msg) {
  38.         array_push($this->feedback, $msg);
  39.     }
  40.    
  41.     function getFeedback() {
  42.         return $this->feedback;
  43.     }
  44.    
  45.     function getFeedBackString($separator="\n") {
  46.         return implode($separator, $this->feedback);
  47.     }
  48. }
  49.  
  50. require_once 'Registry.php';
  51.  class RequestRegistry extends Registry{
  52.      private $values =array();
  53.      private static $instance;
  54.      private function __construct() {
  55.     }
  56.    
  57.     static function instance(){
  58.         if(!isset(self::$instance))
  59.         {
  60.             self::$instance = new self();
  61.         }
  62.         return self::$instance;
  63.     }
  64.    
  65.     protected function get($key) {
  66.         if(isset($this->values[$key]))
  67.         {
  68.             return $this->values[$key];
  69.         }
  70.         return null;
  71.     }
  72.    
  73.     protected function set($key, $value) {
  74.         $this->values[$key] = $value;
  75.     }
  76.    
  77.     static function getRequest()
  78.     {
  79.         return self::instance()->get('request');
  80.     }
  81.    
  82.     static function setRequest(\mycontrollers\Request $request) {
  83.         return self::instance()->set('request', $request);
  84.     }
  85. }
  86.  
  87.  

Я думаю что ошибка возникает изза того что в конструкторе класса Request когда передается этот же объект
(function __construct() {
$this->init();
RequestRegistry::setRequest($this);
}) Request он не создается до конца и соответственно выскакивает ошибка написанная выше. Так ли это или нет и как ее исправить ?
 
 Top
Мелкий Супермодератор
Отправлено: 04 Января, 2017 - 12:57:54
Post Id



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


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


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




В разных пространствах имён может присутствовать класс с одним и тем же именем. Поэтому классы различаются по полному имени включая пространство имён.

Request в глобальном пространстве имён не является классом \mycontrollers\Request (т.е. в пространстве имён mycontrollers). Поэтому ограничение типа при передаче в setRequest объект не проходит.
Или вы не тот объект передаёте или не тот объект требуете. Разберитесь, где какое у вас пространство имён.


-----
PostgreSQL DBA
 
 Top
dot
Отправлено: 04 Января, 2017 - 13:29:07
Post Id


Новичок


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


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




хмм да похоже так и есть спасибо большое !!! Улыбка Тут поправил Улыбка
 
 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