Считать плохой практику непосредственного объединения доступа к базе данных внутри классов вашей модели.Внедрение значений, как правило, предпочтительнее.
Тем не менее, если бы вы были намерены сделать что-то вроде $ model-> load ($ id) и получить его из источника данных, вы могли бы получить что-то вроде:
class Model {
private $_dataProvider;
// inject data-provider dependency in constructor
public function __construct($dataProvider){
$this->_dataProvider = $dataProvider;
}
public function loadById($id){
$myData = $this->_dataProvider->loadDataById($id);
$this->setFoo($myData['foo']);
...
}
}
Внедрив класс доступа к данным, вы можете передать макет для тестирования или заменить базу данных каким-либо веб-сервисом или чем-то еще.Пока у $ dataProvider есть метод loadDataById (), который принимает целое число и возвращает соответствующую структуру данных, у вас все хорошо.
Лично я предпочитаю, чтобы мои модели были хорошими и фокусировались на представлении того, чем они являются 'пере моделирование.Я полагаюсь на внешние классы обслуживания и репозитории для загрузки данных, внедрения их в модели и их возврата.