TransWikia.com

Как разобраться в примере MVC?

Stack Overflow на русском Asked on January 3, 2021

class Model {

    public $text;



    public function __construct() {

        $this->text = 'Hello world!';

    }

}



class View {

    private $model;



    public function __construct(Model $model) {

        $this->model = $model;

    }



    public function output() {

        return '<a href="mvc.php?action=textclicked">' . $this->model->text . '</a>';

    }



}



class Controller {

    private $model;



    public function __construct(Model $model) {

        $this->model = $model;

    }



    public function textClicked() {

        $this->model->text = 'Text Updated';

    }

}





$model = new Model();

//It is important that the controller and the view share the model

$controller = new Controller($model);

$view = new View($model);

if (isset($_GET['action'])) $controller->{$_GET['action']}();

echo $view->output();

Здравствуйте. Меня вводит в ступор вся эта конструкция. Что конкретно делает класс Model в конструкторе и рядом с переменной в классе View? Как это расшифровывается? В конструкторе класса View вызываем класс Model и берем переменную, которую подставим? Или как?

One Answer

Разобраться в этом примере очень просто. Вот представь, пятилетнего ребенка попросили нарисовать троллейбус. А потом подсунули тебе эту картинку, чтобы ты по ней изучал принцип действия транспорта на электрической тяге.

Более осмысленным примером будет

class Model {

    public $text;

    public function __construct() {
        $this->text = 'Hello world!';
    }
}
class View {

    private $data;

    public function __construct($data) {
        $this->data = $data;
    }
    public function output() {
        return '<a href="mvc.php?action=textclicked">' . $data. '</a>';
    }
}
class Controller {

    private $model;

    public function __construct(Model $model) {
        $this->model = $model;
    }
    public function textClicked() {
        $this->model->text = 'Text Updated';
    }
    public function show() {
        $view = new View($this->model->text);
        $view->output();
    }
}

$model = new Model();
$controller = new Controller($model);
if (isset($_GET['action'])) {
    $controller->{$_GET['action']}();
}

Answered by Ипатьев on January 3, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP