ООП Полиморфизм в рhp

243
28 мая 2017, 22:56

Добрий день. Есть такая функция:

public function category($id)
 {
     $page=isset($_GET['page'])? intval($_GET['page']):1;
     $news = new NewsModel();
     $this->data['page']=new Pagination
     ([
         'itemsCount' => $news->getCountNews ( $id ),
         'itemsPerPage' => $this->itemPerPage,
         'currentPage' => $page
     ]);
     $getNews = $news->getNews($id, $page);
     if (!$getNews) {
         $this->render404();
     }
     $this->data['news'] = $getNews;
     $this->render($this->view);
 }

Нужно переопердилить 4 строчку кода

$news = new NewsModel();

на

$news = new AdminModel();

Пытался сделать в основном контроллере (BaseController):

protected $model;
public function category($id)
 {
     $page=isset($_GET['page'])? intval($_GET['page']):1;
     $news = $this->model;
     $this->data['page']=new Pagination
     ([
         'itemsCount' => $news->getCountNews ( $id ),
         'itemsPerPage' => $this->itemPerPage,
         'currentPage' => $page
     ]);
     $getNews = $news->getNews($id, $page);
     if (!$getNews) {
         $this->render404();
     }
     $this->data['news'] = $getNews;
     $this->render($this->view);
 }

поменял $news = new NewsModel() потом

class AdminController extends BaseController
{
    protected $model=new AdminModel();
}

но при создании

protected $model=new AdminModel();

IDE подчеркивает красным,значит так не делаеться .

Answer 1

Вы шли почти в правильном направлении. Свойства в области видимости принимают не все типы данных.

Допустимые типы для значений

protected $model = str | int | array | boolean | heredocs | nowdocs;

Только надо было создать геттер для этих целей (Метод который вернет свойство с присвоенным значением):

class AdminController extends BaseController
{
    protected $model; // При таком раскладе он тут вообще не нужен 
    protcted function getModel(){
        return new AdminModel(); // Не абстрактный класс
    }
}

А потом его и вызывать

public function category($id)
 {
     //..................
     $news = $this->getModel();
     //..............
 }
READ ALSO
Генерация docx средствами php

Генерация docx средствами php

Стоит следующая задача: Существует шаблон док-та в формате docx, в котором есть маркеры (например,{{dlname

345
Скрипт добавляет запись в БД дважды

Скрипт добавляет запись в БД дважды

Суть: храню номер последнего рецепта в файле lasttxt, в скрипте его получаю и пока не пойдут 404 ошибки (50 штук) парсить каждый рецепт и добавлять...

351
Вызов С++ функции из ассемблера

Вызов С++ функции из ассемблера

Здравствуйте, есть массив в ASM(уже инициализированный), вызывается функция С++ которая сортирует и возвращает уже отсортированный массивНаписал...

472
Алгоритм простого числа

Алгоритм простого числа

Может кто нибудь подсказать, что не так с этим алгоритмом? Проблема в том, что при запуске некоторые числа отображаются в командной строке...

203