Запретить подкласс для вызова методов защищенного свойства

Я разрабатываю приложение с использованием концепции MVC и хочу ограничить класс View от вызова методов модели, но дать ему доступ к свойствам модели, чтобы он мог просто получать данные, когда это необходимо. Вместо этого я хочу дать классу Controller возможность вызывать методы модели (и, если возможно, ограничить доступ к свойствам, потому что это действительно не нужно делать).
Мой вопрос: как мне спроектировать отношения классов для достижения этой цели или я могу просто как-то сказать php запретить этому классу вызывать методы другого?
В настоящее время отношения моих классов выглядят так:
контроллер

class Controller
{
protected $_model; //has access to model so it can call model's methods to modify it
protected $_view;

public function __construct($model, $view)
{
$this->_model = $model;
$this->_view = $view;
}

}

Посмотреть

class View
{
protected $_model; //has access to model so it can get model's properties when needed

public function __construct($model)
{
$this->_model = $model;
}

}

И есть другие классы, которые наследуются от классов Controller и View, например:

class UserController extends Controller
{
public function modifyData()
{
$this->_model->modifyX(1); //this works and it should be working because i need the controller to be able to call model's methods
$someVar = $this->_model->x; //this works and it should not be working because i don't need the controller to be able to get model's properties
}
}

а также

class UserView extends View
{
public function getData()
{
$this->_model->modifyX(1); //this works and it should not be working because i don't need the view to be able to call model's methods
$someVar = $this->_model->x; //this works and it should be working because i do need the view to be able to get model's properties
}
}

Итак, что вы предлагаете в качестве лучшего способа достижения этого?

0

Решение

Игнорируя, является ли ваша структура MVC правильной конструкцией программного обеспечения, вы можете решить свою проблему, предоставляя классам только те данные, которые им необходимы. Например, если вы хотите, чтобы ваш View иметь доступ только к Model его свойства, не создавать экземпляры View с Model в качестве аргумента, но только передать данные из Model в View,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]