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 :: Версия для печати :: Ошибка Using $this when not in object context
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Ошибка Using $this when not in object context

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

1. dot - 04 Января, 2017 - 08:43:01 - перейти к сообщению
Добрый день только осваиваю программирование на php и столкнулся вот с такой вот проблемой в коде на $request = $this->getRequest(); выдает ошибку Ошибка Using $this when not in object context
Подскажите плиз что я не так делаю ?
Ниже полный код

CODE (htmlphp):
скопировать код в буфер обмена
  1. class PageControllerManager extends PageController {
  2.    
  3.     public function process() {
  4.         try
  5.         {
  6.                 $request = $this->getRequest();
  7.                 $name = $request->getProperty('userName');
  8.                 if(is_null($request->getProperty('submitted')))
  9.                 {
  10.                     $request->addFeedback('Вы не авторизовались в системе');
  11.                     $this->forward('Registration.php');
  12.                 }
  13.                 $this->forward('UserCaller.php');
  14.         }
  15.         catch (Exception $exc)
  16.         {
  17.             echo $exc->getTraceAsString();
  18.         }
  19.  
  20.        
  21.     }
  22.  
  23. }
  24.  
  25.  
  26.  
  27. abstract class PageController {
  28.     private $request;
  29.     function __construct() {
  30.         $request = RequestRegistry::getRequest();
  31.         if(is_null($request))
  32.         {
  33.             $request = new Request();
  34.         }
  35.         $this->request = $request;
  36.     }
  37.    
  38.     abstract function process();
  39.     function forward($resource) {
  40.         include($resource);
  41.         exit(0);
  42.     }
  43.    
  44.     function getRequest()
  45.     {
  46.         return $this->request;
  47.     }
  48. }
  49.  
  50. class RequestRegistry extends Registry{
  51.     private function __construct() {
  52.     }
  53.    
  54.     static function instance(){
  55.         if(!isset(self::instance()))
  56.         {
  57.             self::instance() = new self();
  58.         }
  59.         return self::instance();
  60.     }
  61.    
  62.     protected function get($key) {
  63.         if(isset($this->values[$key]))
  64.         {
  65.             return $this->values[$key];
  66.         }
  67.         return null;
  68.     }
  69.    
  70.     protected function set($key, $value) {
  71.         $this->values[$key] = $value;
  72.     }
  73.    
  74.     static function getRequest()
  75.     {
  76.         return self::instance()->get('request');
  77.     }
  78.    
  79.     static function setRequest(\mycontrollers\Request $request) {
  80.         return self::instance()->set('request', $request);
  81.     }
  82. }
  83.  
  84. abstract class Registry {
  85.     abstract protected function get($key);
  86.     abstract protected function set($key,$value);
  87. }
  88.  
2. Мелкий - 04 Января, 2017 - 10:02:18 - перейти к сообщению
Смотреть надо, откуда вызывается метод.
Метод вызван как статический, а у статических методов $this нет.
3. dot - 04 Января, 2017 - 10:15:15 - перейти к сообщению
Вызывается так PageControllerManager::process();
находится в index.php
4. Мелкий - 04 Января, 2017 - 10:42:25 - перейти к сообщению
Ну, собственно.
Замените на создание объекта и вызывайте метод объекта.
Или замените реализацию метода на статический.
5. dot - 04 Января, 2017 - 11:05:38 - перейти к сообщению
хмм вот так $request = $this::getRequest(); ?? тогда он выдает Notice: Undefined variable:

Fatal error: Class name must be a valid object or a string и ругается на эту строку , скажите это означает что $request пустая переменная ?
6. Мелкий - 04 Января, 2017 - 11:09:00 - перейти к сообщению
Объект вам нужен, объект.
PHP:
скопировать код в буфер обмена
  1. $Manager = new PageControllerManager;
  2. $Manager->process()
7. dot - 04 Января, 2017 - 11:17:53 - перейти к сообщению
Мелкий пишет:
Объект вам нужен, объект.
PHP:
скопировать код в буфер обмена
  1. $Manager = new PageControllerManager;
  2. $Manager->process()


Спасибо это помогло , не понятно правда почему, но там тут хоть заработало. Щас буду с другими ошибками разбираться. Спасибо огромное за помощь Улыбка

 

Powered by ExBB FM 1.0 RC1