OO PHP-пояснение Для braindead n00b
Я пишу PHP уже около шести лет и добрался до такой степени, что чувствую, что должен делать больше, чтобы писать лучший код. Я знаю, что объектно-ориентированный код - это путь, но я не могу обойти эту концепцию.
Может ли кто-нибудь объяснить в терминах, что любой идиот может понять, OO и как он работает в PHP или указать мне на руководство по идиотам?
Ответы
Ответ 1
Я был на твоем месте, но я увидел свет после того, как прочитал эту книгу (несколько раз!) http://www.apress.com/book/view/9781590599099 После Я прочитал это, я действительно "получил" это, и я не оглядывался назад. Вы получите его на Amazon.
Надеюсь, ты упорствуешь, понимаешь и любишь. Когда он сойдет, он заставит вас улыбнуться.
Композиция превосходит наследование.
Ответ 2
Подумайте об этом. Любая вещь, вещь, которую ты хочешь делать. Скажем, завтрак.
(Весь код псевдокод, любое сходство с любым языком, живущим, мертвым или подвергнутым клиническому насилию в банковской отрасли, является абсолютно случайным и не имеет никакого отношения к тому, что ваше сообщение помечено как 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;
}
И у вас есть беспорядок, а не только из-за beans. У вас есть структура данных, которую программисты могут прикрутить по желанию, постоянно расширяющуюся коллекцию функций, которые нужно делать с завтраком, полностью отделенным от определения данных. Вместо этого вы можете сделать это:
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, и почему это академически лучше, но это моя практическая причина, и она содержит бекон.
Ответ 3
Предупреждение на месте: вы не будете изучать программирование OO без изучения дизайна OO! Ключевой концепцией является определение функций, работающих с вашими данными, вместе с соответствующими данными. Затем вы можете сказать своим объектам, что делать, не запрашивая их содержимое.
Конечно, взгляните на "" Сообщить, не спрашивайте ", а принцип" Необходимость знать "(он же" Закон Деметры ") тоже очень важно.
Ответ 4
Я рекомендую читать Code Complete. Несколько ссылок на PHP OO великолепны, но это доходит до хлеба и масла идеи.
Ответ 5
Некоторые из основных причин использования OO - это структурировать код аналогично тому, как мы, люди, хотим воспринимать и относиться к вещам, и использовать преимущества экономики , надежность и масштабируемость.
i.e: Человечество разработало колесо тысячи лет назад. Мы можем дорабатывать его все время, но нам, конечно, не нужно снова изобретать его...
1) Нам нравится классифицировать вещи: "этот больше, чем этот", "этот стоит больше, чем этот", "это почти то же самое, что и тот.
2) Нам нравится упростить вещи: "Хорошо, это V8 с жидкостным охлаждением с турбонаддувом, но я все еще просто поворачиваю руль и прижимаю ноги но не для того, чтобы управлять этим, правильно?".
3) Нам нравится стандартизировать вещи: "Хорошо, позвольте треугольники, круги и квадраты всех SHAPES, и ожидайте, что у всех их будет AREA и CIRCUMFERENCE".
4) Нам нравится адаптировать вещи: "Хммм, мне это нравится, но могу ли я использовать его в Racing Green вместо этого?".
5) Нам нравится создавать чертежи: "У меня нет времени или денег (или одобрения), чтобы построить это еще, но у него будет дверь и крыша, и некоторые окна, и стены".
6) Нам нравится защищать вещи: "Хорошо, я дам вам увидеть общую цену, но я скрываю разметку, которую я добавил из вы!".
7) Мы любим вещи общаться друг с другом: "Я хочу получить доступ к моему банковскому балансу через: мой мобильный телефон, мой компьютер, банкомат, сотрудник банка и т.д.".
Чтобы узнать, как использовать OO (и увидеть некоторые из преимуществ), я предлагаю вам выполнить упражнение как домашнюю работу - возможно, приложение на основе браузера, которое имеет дело с символами SHAPES, такими как круги, прямоугольники и треугольники, и отслеживает их площадь, цвет, положение и z-индекс и т.д. Затем добавьте квадраты как частный случай прямоугольника, так как он одинаковый по отношению к большей части его определения, области и т.д. Просто добавлено условие, когда высота одинакова как ширина. Чтобы сделать это сложнее, вы можете сделать прямоугольник типом четырехугольника, который является типом многоугольника. и т.д. и т.д.
ПРИМЕЧАНИЕ. Я бы не стал использовать PHP Framework до тех пор, пока вы не освоите основы программирования OO. Они намного мощнее, когда вы можете расширять свои собственные классы, и если вы не можете это сделать, это немного похоже на изучение чего-то по rote → намного сложнее!
Ответ 6
PHP5: http://php.net/oop5
PHP4: http://php.net/manual/en/language.oop.php
Ответ 7
Лучший совет: xtofl.myopenid.com ^^^^
Если вы не понимаете цели шаблонов, вы действительно не собираетесь использовать объекты в полной мере. Вам нужно знать, почему наследование, полиморфизм, интерфейсы, фабрики, декораторы и т.д. Действительно облегчают дизайн, устраняя определенные проблемы.
Ответ 8
Вместо того, чтобы изучать OO с нуля, я думаю, было бы проще, если бы вы взяли фреймворк, который облегчает объектно-ориентированное программирование. Он "заставит" вас использовать правильные методы ООП; вы сможете узнать о том, как основа написана о том, как лучше всего выполнять ООП.
Я бы рекомендовал фреймворк QCodo PHP5 http://www.qcodo.com. В нем есть отличные видеоуроки по настройке, а также видеоуроки (http://www.qcodo.com/demos/).
Полное раскрытие: я развиваюсь поверх этой структуры в течение двух лет, и я внесли код в свою кодовую базу (поэтому я не полностью беспристрастен:-)).
Ответ 9
Другой указатель на изучение OO:
В большинстве учебных пособий OO основное внимание будет уделено наследованию (например, класс X расширяет класс Y). Я думаю, что это плохая идея. Наследование полезно, но это также может вызвать проблемы. Что еще более важно, наследование - это не вопрос ОО. Это абстракция; скрывая детали реализации, чтобы вы могли работать с простым интерфейсом. Узнайте, как писать хорошие абстракции ваших данных, и вы будете в хорошей форме. Не сразу потейте наследование.