2015-04-23 2 views
-2

У меня возникли проблемы с использованием $this.

У меня есть контроллер:

class UserController { 
    public function show() { 
     // prepare $array from database 
     if ok 
      return Response::toJson($array); 
     else 
      return Response::respondWithError("errorMessage"); 
    } 
} 

и класс Response:

class Response 
{ 
    private function respond($array) 
    { 
     //do som 
    } 

    public function toJson($array) 
    { 
     // do som 
     $this->respond($array); 
    } 

    public function respondWithError($message) 
    { 
     // do som 
     $this->respond($array); 
    } 
} 

И я получаю ошибку:

Call to undefined method UserController::respond()

Почему $this не ссылается на класс Response но UserController? И как я могу назвать метод respond() от foo()?

+3

вы звоните 'Response :: Foo' статически, а затем' $ this- > response(); 'пытается получить доступ к методу экземпляра' Response'. – AbraCadaver

+0

Так что я должен вернуть Response :: ответить()? – redgiun

+0

Непонятно, что вы делаете, но вы можете 'return self :: reply();' – AbraCadaver

ответ

0

Во-первых, вы используете $foo, как статический, так объявим его как статические, и понятнее ...
Вы не можете использовать $this на статический метод ...
вы могли бы сделать respond() статические, а затем использовать self::respond()

+0

Я использую ваш ответ. Просто интересно, если это правильный путь для достижения моей цели. – redgiun

+0

Если вы не хотите этого делать, вам придется создать объект класса Response, и вам не понадобятся все статические ключевые слова – Random

+0

Спасибо за объяснение. Ваши ответы решают мою проблему. – redgiun

0

Вы не можете использовать методы внутри метода STATIC, потому что таким образом вы сломаете encapsulation of OO.

+0

все еще возникают проблемы с '$ this' ... – Random

0

вы не можете использовать $this в foo, вы должны определить respond статическую тоже:

class UserController { 
    public function show() { 
     // do something 
     return Response::foo($array); 
    } 
} 
class Response { 
    private static function respond() { 
     // do something 
    } 

    public static function foo($array) { 
     // do 
     return self::respond(); 
    } 
} 
Смежные вопросы