OO PHP-пояснение Для braindead n00b

Я пишу PHP около шести лет и добрался до такой степени, что чувствую, что должен делать больше, чтобы писать лучший код. Я знаю, что объектно-ориентированный код – это путь, но я не могу понять эту концепцию.

Может ли кто-нибудь объяснить в терминах, что любой идиот может понять, OO и как он работает на PHP или указать мне на руководство по идиотам?

Solutions Collecting From Web of "OO PHP-пояснение Для braindead n00b"

Я был на твоем месте, но я увидел свет после того, как прочитал эту книгу (несколько раз!) http://www.apress.com/book/view/9781590599099 После того, как я прочитал это, я действительно «получил» это и Я не оглядывался назад. Ты получишь это на Амазонке.

Надеюсь, вы упорствуете, получаете его и любите. Когда он соберется вместе, он заставит вас улыбнуться.

Композиция превосходит наследование.

Подумайте о чем-нибудь. Любая вещь, вещь, которую ты хочешь делать. Скажем, завтрак.

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

Таким образом, вы определяете шаблон для того, как вы будете представлять завтрак. Это класс:

class Breakfast { } 

Завтраки содержат атрибуты. В обычных объектах, не ориентированных на объекты, вы можете использовать для этого массив:

 $breakfast = array( 'toast_slices' => 2, 'eggs' => 2, 'egg_type' => 'fried', 'beans' => 'Hell yeah', 'bacon_rashers' => 3 ); 

И у вас были бы различные функции для возиться с ним:

 function does_user_want_beans($breakfast){ if (isset($breakfast['beans']) && $breakfast['beans'] != 'Hell no'){ return true; } return false; } 

И у вас есть беспорядок, и не только из-за бобов. У вас есть структура данных, которую программисты могут прикрутить по желанию, постоянно расширяющуюся коллекцию функций, которые нужно делать с завтраком, полностью отделенным от определения данных. Вместо этого вы можете сделать это:

 class Breakfast { var $toast_slices = 2; var $eggs = 2; var $egg_type = 'fried'; var $beans = 'Hell yeah'; var $bacon_rashers = 3; function wants_beans(){ if (isset($this->beans) && $this->beans != 'Hell no'){ return true; } return true; } function moar_magic_pig($amount = 1){ $this->bacon += $amount; } function cook(){ breakfast_cook($this); } } 

И тогда манипулирование идеей программы завтрака становится намного чище:

 $users = fetch_list_of_users(); foreach ($users as $user){ // So this creates an instance of the Breakfast template we defined above $breakfast = new Breakfast(); if ($user->likesBacon){ $breakfast->moar_magic_pig(4); } // If you find a PECL module that does this, Email me. $breakfast->cook(); } 

Я думаю, что это выглядит более чистым и более далеким способом представления капли данных, которые мы хотим рассматривать как согласованный объект.

Есть лучшие объяснения того, что на самом деле есть ОО, и почему это академически лучше, но это моя практическая причина, и в ней содержится бекон.

Предупреждение на месте: вы не будете изучать программирование OO без изучения дизайна OO! Ключевой концепцией является определение функций, работающих с вашими данными, вместе с соответствующими данными. Затем вы можете сказать своим объектам, что делать, не запрашивая их содержимое.

Конечно, взгляните на философию « Скажи, не спрашивай », и принцип «Необходимость знать» (он же «Закон Деметры») тоже очень важен.

Я рекомендую прочитать Code Complete . Несколько ссылок на PHP OO великолепны, но это доходит до хлеба и масла идеи.

Некоторые из основных причин использования OO – структурировать код так же, как мы, люди, хотим воспринимать и относиться к вещам, а также использовать преимущества экономики , ремонтопригодности , надежности и масштабируемости .

т.е.: Человечество разработало колесо тысячи лет назад. Мы можем дорабатывать его все время, но нам, конечно, не нужно снова изобретать его …

1) Нам нравится классифицировать вещи: «это больше, чем этот», «этот стоит больше, чем этот», «этот почти такой же, как и тот».

2) Нам нравится упрощать вещи: «Хорошо, это турбодвигатель с жидкостным охлаждением V8, но я все еще просто поворачиваю рулевое колесо и нажимаю ноги на торцы, чтобы управлять им, верно?».

3) Нам нравится стандартизировать вещи: «Хорошо, давайте назовем треугольники, круги и квадраты всех SHAPES, и ожидаем, что у всех их будет AREA и CIRCUMFERENCE».

4) Мы любим приспосабливать вещи: «Хммм, мне это нравится, но могу ли я использовать его в гоночном зеленом?».

5) Нам нравится создавать чертежи : «У меня нет времени или денег (или одобрения), чтобы построить это еще, но у него будет дверь и крыша, а также окна и стены».

6) Мы любим защищать вещи: «Хорошо, я дам вам посмотреть общую цену, но я скрываю надпись, которую я добавил от вас!».

7) Нам нравится общаться друг с другом: «Я хочу получить доступ к своему банковскому балансу через: мой мобильный телефон, компьютер, банкомат, сотрудник банка и т. Д.».

Чтобы узнать, как использовать OO (и увидеть некоторые из преимуществ), я предлагаю вам сделать упражнение в качестве домашней работы – возможно, приложение на основе браузера, которое касается SHAPES, таких как круги, прямоугольники и треугольники, и отслеживает их область, цвет, положение и z-индекс и т. д. Затем добавьте квадраты как частный случай прямоугольника, так как он одинаковый по отношению к большей части его определения, области и т. д. Просто добавлено условие, когда высота такая же, как ширина , Чтобы сделать это сложнее, вы можете сделать прямоугольник типом четырехугольника, который является типом многоугольника. и т.д.

ПРИМЕЧАНИЕ. Я бы не стал использовать PHP Framework до тех пор, пока вы не освоите основы программирования OO. Они намного мощнее, когда вы можете расширять свои собственные классы, и если вы не можете, то это немного похоже на изучение чего-то по-другому – намного сложнее!

Лучший совет: xtofl.myopenid.com ^^^^

Если вы не понимаете цели шаблонов, вы действительно не собираетесь использовать объекты в полной мере. Вы должны знать, почему наследование, полиморфизм, интерфейсы, фабрики, декораторы и т. Д. Действительно упрощают дизайн, решая конкретные проблемы.

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

Я бы рекомендовал фреймворк QCodo PHP5 http://www.qcodo.com . Он имеет отличные видеоуроки о том, как его настроить, а также видео-тренинги ( http://www.qcodo.com/demos/ ).

Полное раскрытие информации: я развивался поверх этой структуры в течение двух лет, и я внес свой код в свою кодовую базу (поэтому я не полностью беспристрастен :-)).

Другой указатель на обучение OO:

Большинство учебных пособий OO будут сосредоточены на наследовании (например, класс X расширяет класс Y). Я думаю, что это плохая идея. Наследование полезно, но это также может вызвать проблемы. Что еще более важно, наследование – это не вопрос ОО. Это абстракция; скрывая детали реализации, чтобы вы могли работать с простым интерфейсом. Узнайте, как писать хорошие абстракции ваших данных, и вы будете в хорошей форме. Не сразу потейте наследование.