使用$ this

时间:2015-04-23 15:00:02

标签: php class methods this

我在使用$this时遇到了一些麻烦。

我有一个控制器:

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

响应类:

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);
    }
}

我收到错误:

  

调用未定义的方法UserController :: respond()

为什么$this不引用Response类而是引用UserController?如何从respond()调用foo()方法?

3 个答案:

答案 0 :(得分:0)

你不能在STATIC方法中使用方法,因为那样你就会破坏encapsulation of OO

答案 1 :(得分:0)

首先,您使用$foo作为静态,因此将其声明为静态,并且更清楚......
您不能在静态方法上使用$this ...
您可以将respond()设为静态,然后使用self::respond()

答案 2 :(得分: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();
    }
}