Я начал учиться около 6 месяцев назад, хотя я на некоторое время остановился из-за учебы.
Проблема в том, что всякий раз, когда я использую oop в своем проекте, я обычно стараюсь просто сделать каждую вещь классом: будь то инициализация, отображение, зацикливание и многое другое … если быть точным, я не понимаю, когда использовать / создавать классы.
Другая проблема заключается в том, что я не знаю, какое преимущество у классов перед функциями. В настоящее время я просто смешиваю их.
Я смотрю видео на YouTube, в котором рассказывается о классах и коде клиента. В этом видео они сказали, что классы больше похожи на коды разработчиков, а клиентские коды — это коды, которые мы пишем, которые используют код разработчика для упрощения работы. Поэтому он советует разбить наш код на код клиента / разработчика.
Но я не знаю, как разбить мой код на код клиента и код разработчика.
На самом деле я создавал классы для всех своих страниц, таких как index.php, about.php
<?php
class about{
public $title = 'about page';
public $page_color = 'red';
//functions and more codes
}
После написания приведенного выше кода я знаю, что что-то не так делаю правильно. Я пытался найти в Google и прочитал много книг, но каждый раз, когда они используют автомобиль пример класса, который я не могу применить к своей кодировке или просто не затрону контекст, где класс нужен или не нужен.
Примечание: мне удобно создавать сайт с использованием процедурных кодов, но мне нужно учиться, если мне это когда-нибудь понадобится.
Чтобы ответить на ваш вопрос: Да, вы используете это неправильно. Однако это не быстрое решение чтобы вы использовали его правильно.
Я не могу дать вам ответ, который будет означать, что вы начнете писать идеальный код ООП завтра.
Вы на правильном пути, учитесь и практикуйтесь. Делать ошибки, жить с этими ошибками и рефакторинг их. Вы будете острее, чем больше вы делаете это.
У меня 16-летний опыт работы, и я все еще нахожу новые правила и исключения в ООП. Это не точная наука — это метод, который может давать разные результаты в зависимости от контекста.
Просто посмотрите на все ваши комментарии, и вы не увидите общего идеального консенсуса. Все итеративно улучшают реализацию друг друга. Вы можете использовать этот подход в своем коде, поддерживать его в чистоте и порядке, обмениваться битами по мере того, как вы найдете лучшие или более правильные способы их реализации.
Ну, я не выучил php. Но я хороший Java-разработчик. И мои концепции ООП хороши. Вы упомянули, что не понимаете основных преимуществ классов над функциями. Оба они совершенно разные. Класс — это план программного обеспечения. Где функция представляет поведение программного обеспечения. Вы пишете весь код, который выполняет обработку данных, предоставляемых пользователем как ввод, и генерацию вывода в функциях. Классы содержат эти функции. Основным преимуществом написания кода в классах является то, что они могут быть написаны в одном месте и использованы повторно в любом месте. И концепции ООП слишком обширны. Все и все нельзя объяснить в постах. ООП гораздо выгоднее, чем процедурное программирование. Представьте, что вы работаете над очень большим проектом. Некоторые функции в программном обеспечении являются общими. В ООП вы можете писать код в одном месте и использовать его где угодно. В процедурном программировании вы должны переписывать один и тот же код везде, где вы используете эти функции. Таким образом, ваша головная боль при написании кода будет минимизирована в ООП. Кроме того, если общий код работает в одном месте, он, очевидно, будет работать везде, где он используется. Так ООП развился из процедурного программирования.
ООП является основой большинства языков программирования, поэтому вы захотите использовать его в основном все время, когда полностью его понимаете.
Веб-сайты немного сложнее, чтобы дать вам хорошие примеры, поэтому я постараюсь дать общую схему, а затем более веб-ориентированность.
Классы должны содержать данные, относящиеся к каждому из них, в здравом смысле. Например, автомобиль, очевидно, будет содержать Двигатель (другой класс), цвет, имя, владельца и т. Д. И внутри этого двигателя будет храниться собственный набор данных, относящихся к нему (максимальная скорость, миль на галлон, так далее.). Это основа для объединения ваших данных, далее идут функции внутри классов.
Теперь, когда Car хранит данные, относящиеся к автомобилю, Car также содержит функции, которые будет выполнять автомобиль, или функции, которые автомобиль будет использовать для взаимодействия с его данными. Получатели (GetColour ()) позволяют внешним объектам получать информацию об этом конкретном автомобиле (поскольку Car1 и Car2 могут содержать разные цвета). Сеттеры, напротив, устанавливают данные объекта. Тогда у нас есть все остальное. Car.start (), который внутренне вызывает this.engine.start (), который может настроить некоторые функции, чтобы начать слив газа из двигателя и позволить автомобилю двигаться.
Классы — это то, что их легко читать, легко понять и легко использовать повторно. После того, как ваш класс автомобилей завершен, вы можете повторно использовать столько автомобилей, сколько вам нужно, и все они прекрасно автономны.
На веб
Во-первых, я настоятельно рекомендую вам взглянуть на архитектуру MVC, которая является основной частью веб-архитектуры и облегчает понимание ООП для веб-сайтов. По сути, ваш веб-сайт разделен на контроллеры (отвечающие за взаимодействие с БД и возвращающие вам страницу), модели (данные вашей базы данных, например, пользователь) и ваши представления (HTML с небольшим количеством шаблонов, чтобы ваши контроллеры могли передавать ему динамические данные )
Например: вы идете на сайт / posts / Stanley, ваш маршрутизатор (еще одна вещь MVC) решает, что это должно быть обработано PostsController (класс). Контроллер постов знает, что вам нужны все посты от пользователя Stanley, поэтому он просит модель постов (класс) получить все посты от Stanley, затем контроллер передает их в представление для заполнения шаблона, используя ваши посты, специфичные для Stanley.
Уходя от MVC на секунду,
В вашем примере, я бы предположил, вы будете использовать классы для манипулирования данными и доступа к БД. Например, если вы храните записи блога в базе данных, у вас может быть класс Blog с данными, которые соответствуют вашим строкам БД (id, user_id, title, body) и функциями для доступа к этим данным, чтобы вставить их в HTML-код, но также для получения их из база данных легко.
Например:
BlogPost :: All () может возвращать массив каждого сообщения блога, самого нового или самого старого.
BlogPost: By (user_id) может возвращать массив сообщений определенного пользователя.
BlogPost: Удалить (id) может удалить сообщение в блоге, учитывая его идентификатор.
BlogPost: RatingAtLeast (starRating), получить все сообщения в блоге, по крайней мере, рейтинг StarRating.
Вы поймете идею … Этот класс будет существовать, как вы сказали выше, чтобы дать вам клиентский код для доступа к вашей базе данных, который является ОСОБЕННЫМ для вашего варианта использования и поскольку BlogPost содержит переменные, связанные с вашим BlogPost. Поэтому BlogPost :: All () будет возвращать массив BlogPost.