php类继承$ this-> ...是未定义的?

时间:2016-01-30 15:21:05

标签: php

编辑:解决了,我在Controller类中使用私有而不是受保护的属性。

尝试使用继承的类中的属性时出现错误。我的Controller类看起来像这样。

<?php

namespace App\Controllers;

use Http\Request;
use Http\Response;
use App\Templates\Renderer;

class Controller{
    private $request;
    private $response;
    private $renderer;

    public function __construct(Request $request, Response $response, Renderer $renderer){
        $this->request = $request;
        $this->response = $response;
        $this->renderer = $renderer;
    }
}

我正在扩展的Pages类看起来像这样。

<?php

namespace App\Controllers;

use App\Models\Book;


class Pages extends Controller{

    public function index(){
        $book = new Book;
        $book->title = 'test';
        // $book->save();
        // echo 'Book created';
        $html = $this->renderer->render('index');
        $this->response->setContent($html);
    }
}

我得到的错误看起来像这样

Undefined property: App\Controllers\Pages::$renderer

1 个答案:

答案 0 :(得分:0)

您应该将$renderer字段的可见性从private更改为protected

那是因为

  • 私有字段/函数只能从自己的类中访问
  • 公共字段/功能可以从任何地方访问
  • protected 字段/函数可以从扩展当前类的所有类中访问,包括父类

http://php.net/manual/en/language.oop5.visibility.php