Я пишу PHP без "классов" в течение многих лет ... что мне не хватает? - PullRequest
21 голосов
/ 21 февраля 2012

Насколько я могу судить, я не могу сосредоточиться на «классах» в PHP.

Мне удалось написать большие, масштабируемые и популярные сайты без них.

Чего мне не хватает? (А как мне научиться?)

Ответы [ 6 ]

12 голосов
/ 21 февраля 2012

Классы помогут с повторным использованием кода и потенциально очень структурированным приложением.

Процедурное программирование может быть намного быстрее как по времени разработки, так и по скорости выполнения.

OO-программирование является более распространенным, но не всегда лучшим способом.Есть книга под названием «Объекты, шаблоны и практика PHP», которая очень хорошо читается, она охватывает основы классов, почему и как использовать, абстракции и общие шаблоны проектирования, такие как MVC.Он также охватывает юнит-тестирование и другие очень хорошие практики для разработчиков php

9 голосов
/ 21 февраля 2012

Смысл классов (объектно-ориентированное программирование) состоит в том, что он связывает данные вместе с кодом, который на них работает.Если все сделано правильно, это приводит к менее тесно связанному и, следовательно, более удобному для обслуживания коду.

На практике это означает меньшее количество глобальных переменных (используемых напрямую или через статические фабричные методы) и меньше передачи данных (т. Е. Меньший метод).подписи).

В качестве конкретного примера рассмотрим расширение Mysqli : каждая функция имеет процедурную версию и версию ООП, а процедурная версия почти всегда должна иметь дополнительную «ссылку»параметр для предоставления ему контекста, тогда как версия ООП получает этот контекст из текущего объекта.

3 голосов
/ 21 февраля 2012

IMO, если вы не хотите разделять ваш код htmls & php;вам лучше не использовать классы.

Они понадобятся вам в среде фреймворка (не обязательно), и они вам понадобятся, если вы хотите объективировать свои данные, обрабатывайте их так.

но если у вас все хорошо без этого, то у вас все в порядке:)

Когда речь идет о работе с очень сложной системой, с множеством различных структур данных, более чем одним членом команды и т. д.Вы и ваш код должны быть организованы очень хорошо, и вам понадобятся занятия.

3 голосов
/ 21 февраля 2012

Все ответили, что были правы, вы много скучаете, скажем, у вас есть сайт фотогалереи вместо того, чтобы писать функции, и в конце концов вы заканчиваете большим количеством их

ООП будет полезно:

  1. Код организации и ремонтопригодности
  2. Добавляет ясности и уменьшает сложность
  3. Подчеркивает данные над процедурами
  4. Код модульности
  5. Повторное использование кода (поверьте, вам это понадобится очень)
  6. Хорошо подходит для баз данных

Я раньше не использовал ООП, но я начал и, честно говоря, не так давно, и нашел это очень полезным в этих вопросах, особенно в плане повторного использования кода

Допустим, у меня есть сайт фотогалереи я создам класс для пользователей, и этот класс будет делать CRUD для всей таблицы пользователей и класс для фотографий, чтобы сделать CRUD на всех таблицах фотографий

Я также мог бы сделать класс, чтобы сделать все CRUD для меня, не указывая на какой таблице а затем использовать наследование, чтобы расширить все CRUD в моем классе пользователей и моем классе фотографий

смысл в том, что я мог писать методы CRUD только один раз а затем снова использовать его во всех других моих классах

Надеюсь, я бы ответил на ваш вопрос

2 голосов
/ 21 февраля 2012

Хороший вопрос!Вы получили мой голос!

Прямо в точку: Вам не хватает целого мира !

Есть много метафор, чтобы описать это, но нет ничего лучше практики - вы, очевидно, знаете это после "лет" программирования!

Выберите небольшой проект и напишите его в стиле ООП .Тогда вы поймете идею.

Также примите этот совет: назовите ваши классы как их имена файлов (например, «MyClass» -> «MyClass.php»).Прост в обслуживании.

0 голосов
/ 21 февраля 2012

Возможно, вам не хватает тестируемости: я полагаю, ваши функции вызывают другие функции, которые, в свою очередь, могут вызывать другую функцию, верно? Поэтому у вас будут проблемы с тестированием изолированной функции. С помощью ООП вы собираете «кучи» объектов и можете заменять каждый объект на «поддельный» (называемый макетом или заглушкой) для теста. Таким образом, вы можете протестировать каждую функциональность отдельно. Подумайте о возможности проверить ваш выходной код без базы данных. Подумайте о тестировании кода вашего контроллера (кода, который обрабатывает параметры запроса и решает, какие действия предпринять), не нуждаясь в веб-сервере.

...