сейчас обучаюсь на курсах по Web-програмированию и сейчас вообще не понимаю как работать с ООПк ООП ты придешь сам, но спустя некоторое время практики (год-два). Когда тебе не потребуются курсы, что бы писать на языке. Сейчас что-либо тебе объяснять бесполезно. И не нужно. Научись писать сначала код без самописных классов.
И как можно сделать страничку с сохранеными данными через ооп?Это тема если и не целой книги, то большого раздела в книге.
PostsView, который отвечает за вывод поста в виде HTMLникакого PostsView быть не должно - достаточного одного View - это, по сути, шаблонизатор, с буферизацией вывода. Что, по твоему, должен делать PostsView?
Что почитать по этой теме"Архитектуру корпоративных приложений" Фаулера. Главу "источники данных".
Ведь мы не можем просто взять и в PostsModel выполнить JOIN необходимых полей из таблицы Users?Я в своем самописном фреймворке так и сделал. Есть метод для JOIN в моей ORM, он возвращает многомерный массив объектов, где каждый конечный элемент (на твоем примере) будет объект модели Поста и Пользователя. Почему так? Потому, что сделать так:
<html>
Текст поста: <?=$post->getText()?><br>
Автор поста: <?=$post->getAuthor()->getName()?> <!-- это самое сложное -->
</html>
В приложении нужно с помощью чистого PHP реализовать модель MVCГлупая тестовая задача. Я писал с чистого листа свой собственный MVC-фреймворк на PHP и я откровенно скажу, что до того момента, пока код не стал более-менее идеальным MVC, ушло, мягко сказать, очень много времени.
public static function IfModifiedSince(\DateTime $date): bool
{
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$if_modified_since = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($if_modified_since && $if_modified_since >= $date->getTimestamp()) {
return false;
}
}
return true;
}
if (!Request::IfModifiedSince($resource->getModificationTime())) {
// отдаем 304 заголовок
return $this->getResponse()->setHttpStatusCode(304);
}
$this->getResponse()
->setHeader(Response::HEADER_CONTENT_TYPE, 'text/css; charset=utf-8')
->setHeader('Last-Modified', $resource->getModificationTime()->formatHttpDate())
->setHeader('Cache-Control', 'no-cache, must-revalidate');
// выводим файл
'~^/categories(/[a-z0-9_/\-]+/)$~i'
/<category_slug>/<subcategory_slug>/
class Advert {
// Объявление детально
public function displayAdvert(){
// Показать объявление детально
}
}
public function displayMyAdverts(){
интерфейс гуманоид (декларация человекоподобного существа и декларация его базовых методов - идти, бежать, думать, размножаться)
-> абстрактный класс человек (имеет реализацию задекларированных в интерфейсе методов, имеет общую реализацию)
--> конкретный класс человек мужчина (частности реализации)
--> конкретный класс человек женщина (частности реализации)
-> абстрактный класс инопланетянин (имеет реализацию задекларированных в интерфейсе методов, имеет общую реализацию)
--> конкретный класс инопланетянин мужчина (частности реализации)
--> конкретный класс инопланетянин женщина (частности реализации)