ООП для начинающих PHP. Инкапсуляция и полиморфизм.Просто о сложном

preview_player
Показать описание
В этом уроке мы поговорим о таких усложненных вещах как Инкапсуляция и полиморфизм. Это основополагающие концепции в ООП php.
========================================================
И не пропускай новые видео!!!
========================================================
ПЛЕЙ-ЛИСТЫ МОЕГО КАНАЛА:
========================================================

========================================================
Рекомендации по теме
Комментарии
Автор

Автору спасибо за статью и попытку объяснить полиморфизм, но не сразу дошло мне и думаю и многим. Попытаюсь и я объяснить, может кому то моя трактовка будет более понятнее.
Есть у нас много классов с разными именами, но у всех есть метод который имеет одинаковое имя (по другому у всех есть функция с одним и тем же именем) но то, что внутри в этом методе(функции) у всех разное.
Пример:
class A{
function name() {
$per = 1;
}
}
class B{
function name() {
$type = 'b';
}
}
class C{
function name() {
$name = 'Alex';
}
}
И вот для каждого случая мы будет создавать объект с каким то классом. Так мы можем создать много объектов и запутаться в количестве этих объектов. Для того, что бы этого не произошло, нам нужно, что то одно - универсальное.
Мы может из этих классов выбрать один класс и сделать родительским для всех, но лучше создать новый класс и в него поместить метод с таким же именем и еще метод с другим именем, а во внутри второго метода будем обращаться к первому методу.
class D{
function name() {
$z = '3';
}
function call() {
name();
}
Всем классам теперь нужно добавить extends D. Получится class A extends D{}, class B extends D{}, class C extends D{}.
Для каждого класса создадим объект. И в каждом объекте вывозим метод name() то получим четыре разных результата. 1, b, Alex, 3 - ка бы логично. Но вызовем у каждого объекта метод call() то по логике он должен выдать четыре раза результат из базового класса class D - 3, но нет, будет результат 1, b, Alex, 3. Как так в других классах нет этого метода, но суть такая он выполняет метод name(), но этот метод обращается к своему классу. Вот и это и есть полиморфизм.
Может я еще больше кого то запутал, а кому то понятнее станет.

Ivan-rcit
Автор

Самая большая сложность в ООП с которой я столкнулся, это понять, какое практическое применение этим знаниям, я до сих пор не понимаю многое, и как мне кажется, ошибка всех преподавателей в том, что они начинают рассказывать подход, но не рассказывают в каких практических ситуациях это может нам помочь((( Я уточню, принцип работы я понял, неследники класса А создают метод с разной начинкой и данными, а затем юзают метод из класса А чтобы вызвать метод из класса Б, но зачем так усложнять, можно вызвать метод сразу из нужного объекта. Я точно в чем то ошибаюсь и не говорю что это бесполезно, как-раз таки и хочется убеждаться в том, что это не бесполезно, но преподаватели просто говорят что вот так можно делать, счастливой дороги, просто знай это.

mexvision-
Автор

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

vanya
Автор

Отличный канал, лучший из того что я видел.

МаксимХрамцов-кщ
Автор

понравилась закладка с хабра "что такое полиморфизм?" в браузере)

rsergei
Автор

с каждым уроком просмотров все мееееньше и меееееньше. люди все брееееются и брееееются)) понимают что это не их видимо) а я. а я еще учусь) медленно но уверенно XD

marcitrixie
Автор

Збс где примеры ? Мог бы просто оставить ссылки на статьи и всё .

theacademyofcomics
Автор

Спрашивается - зачем называть урок "полиморфизм" если этот самый полиморфизм тут ни хрена на объясняется? Объяснить его на собственном примере и растолковать людям - это дорогого стоит. А нахайпить на названии а потом кинуть ссылку на статью, где к тому же объяснено хреново - это и есть то, что определяет понятие "говноканал". И это печально.

dww
Автор

Отдельно доставляет ошибка в коде в примере на php.su

billy_jean
Автор

Я так и не понял, зачем создавать 3 класса. В 1: мы создаем пустую функцию. А в 2, 3 наследуем 1 (пустой), зачем? Нельзя просто сделать 2, 3 класс без 1. Какие задачи решает 1 класс с пустой функцией?

КиберевСвятослав
Автор

Полиморфизм — способность функции обрабатывать данные разных типов.
Вот пример!




abstract class Shape{




//создаем шаблон outshape() метод для каждого наследуемего класса
abstract protected function outshape();




//вызов функции outshape() исходя из объекта $this->(этот_объект)
public function draw(){
print $this->outshape(). "\n";
}




}




class Circle extends Shape{




public function outshape(){
return "<h3>Рисуем круг</h3>";
}
}




class Square extends Shape{




public function outshape(){
return "<h3>Рисуем квадрат</h3>";
}
}




class Triangle extends Shape{




public function outshape(){
return "<h3>Рисуем треугольник</h3>";
}
}








$c = new Circle();
$s = new Square();
$t = new Triangle();




$c->draw();
$s->draw();
$t->draw();
/*
Получим после исполнения скрипта:
Рисуем круг
Рисуем квадрат
Рисуем треугольник




Создаем объект каждого класса кроме абстрактного.
$c = new Circle();
$s = new Square();
$t = new Triangle();








Вызываем метод draw()
$c->draw();
$s->draw();
$t->draw();




На этапе компиляции (позднее связывание) компилятор смотрит что в созданных объектах нет метода draw() и обращается к родительскому классу. Там находит метод draw() и исходя из объекта в котором была вызванная функции draw() вызывает метод
outshape() нужного класса.
*/

ДенисБацаев
Автор

На самом деле автор описывает наследование вместо полиморфизма.

RomanTymoshyk
Автор

Лучше один раз послушать, чем глаза напрягать на хабрах

roni-ccoq
Автор

Раз полиморфизм сложен в понимании, то надо подробно объяснить, а не оставлять ссылки в описании.

yelzhx
Автор

По поводу инкапсуляции, Private, Protected и Public - это не ключевые слова, а модификаторы доступа.

developingsu
Автор

"Дизлайк и отписка". Ну шутка, конечно, но вот прям видео совсем мимо. Если говорить, что инкапсуляция - это всего лишь сокрытие, такой ответ трактуется как неправильный, судя по многочисленным отзывам. И можно на этом вопросе сразу провалить собеседование. Инкапсуляция включает в себя, не ограничивается сокрытием.
Плюс пример неудачный. Кнопка это пример именно инкапсуляции, при чем тут полиморфизм? Вот если при нажатии на одну и ту же кнопку разными людьми происходят разные действия - это был бы полиморфизм. Ну например кнопка со сканером отпечатков пальца - если на нее нажимает хозяин, то открывается дверь, а если чужой - то звенит дверной звонок.
А вот просто кнопка - это инкапсуляция. Она в себе скрывает некий механизм работы, который для нажимающего не важен - это и есть инкапсуляция. И в том числе сокрытие логики работы, ну провода проложены где-то там в стене, чтобы какой-нибудь электрик от звонка случайно не запитал люстру в комнате.

АндрейСтавицкий-юп
Автор

Если кто не понял поповоду полиморфизма, вот я кратции вам расскажу:
Это по сути переопределение методов и свойств класса который наследуешь и само собой переопределение логики этих методов или свойств

codememory