Для чего нужно ООП? Оно нужно для упрощения. Благодаря ООП можно разбить большую задачу на более мелкие, которые легче решить. Ещё оно нужно для упрощения написания программного кода. Практически ни один большой проект не обходится без ООП.
А если "на пальцах", то в чём отличительная особенность ООП? Если Вы уже практиковались в программировании, то наверняка заметили, что чем больше становится проект, тем больше функций (function) Вы пишите. И это правильно! Такая модель программирования называется "процедурной". Но минус её в том, что постоянно приходится придумывать названия функциям, чтобы не повторяться. В ООП функции находятся внутри классов. Поэтому могут существовать несколько функций с одинаковыми названиями, но при этом они находятся внутри разных классов.
Классы - это просто набор функций? И да, и нет. Функции, которые находятся внутри классов, обзываются методами (не бойтесь этого слова - это просто название). Классы - это не только обёртки, к примеру, существует метод под название "конструктор", который вызывается при запросе любого метода, до обработки метода. Благодаря чему можно вынести, к примеру, в него проверку уровня доступа к методу, из-за чего уменьшается количество строк кода - программу становится легче читать.
Пример ООП
Представим, что у нас уже написана какая-то функция, то есть в нашем проекте в основном используется процедурная модель:<?php
function Name(){
return 'Мышь';
}
$a = Name(); // $a примет значение, которое вернёт функция Name()
echo $a;
?>
Если мы перепишем этот пример через ООП, то получится такой код:
<?php
class Mouse{
public function Name(){
return 'Мышь';
}
}
$a = new Mouse; // $a - это новый ("new") объект класса Mouse
$b = $a->Name(); // в $b будет значение, которое даст метод Name()
echo $b;
?>
Посмотрите внимательно на два приведённых примера. В результате их выполнения на странице будет выведено слово "Мышь". Но в первом случае используется процедурный стиль программирования, а во втором ООП. Вы можете справедливо заметить, что код ООП намного длиннее, в нём больше строчек, он сложнее для понимания. Это правда, но если в проекте будет под 100 тысяч строк, то процедурный стиль будет настоящим кошмаром. В больших проектах лучше использовать ООП. Но при этом можно смешивать стили - это вполне законно. К примеру, вынести пару функций отдельно от всех классов.
Давайте модифицируем пример так, чтобы выгода от применения ООП была более очевидная. Для этого введём вторую функцию, которая будет возвращать не "Мышь", а "Кот". Если в примере процедурного стиля нам бы пришлось делать вторую функцию с названием "NameCat", чтобы как-то разделить две функции, то в ООП мы сделаем второй класс, но название функции оставим "Name":
<?php
class Mouse{
public function Name(){
return 'Мышь';
}
}
class Cat{
public function Name(){
return 'Кот';
}
}
$a = new Mouse; // $a - это новый объект класса Mouse
$b = new Cat; // $a - это новый объект класса Cat
$с = $a->Name(); // запрашиваем метод Name объекта Mouse
$d = $b->Name(); // запрашиваем метод Name объекта Cat
echo $с . ' и ' . $d;
?>
В результате выполнения этого кода мы получим строчку:
Мышь и КотА теперь представьте, что у каждого класса не два метода, а двадцать, которые возвращают: возраст, цвет глаз, любимую еду, рост, вес, длину хвоста.... Если программировать всё это без ООП, то будет каша в названиях функций. А если классов не два, а десяток, то процедурный тип программирования уничтожит весь проект.
Свойства в ООП
Свойства классов - это по сути переменные внутри классов, в которые можно записывать данные (но в основном их используют для задания констант). Продемонстрируем получение значения свойства и запись в него:<?php
class Mouse{
public $variable; // своство без значения (зададим его позже)
public $string = 'Мышь'; // свойство с заданным значением
}
$a = new Mouse; // $a - это новый объект класса Mouse
$a->variable = 'Кот'; // запишем в свойство "variable" строку "Кот"
$b = $a->string; // запрашиваем значение свойства "string" объекта Mouse
$c = $a->variable; // запрашиваем значение свойства "variable" объекта Mouse
echo $b . ' и ' . $c;
?>
Значение "variable" будет храниться внутри $a (объекта класса Mouse) до тех пор, пока скрипт не закончит работу. Значение свойства "string" можно изменить так же, как и значение "variable". В результате выполнения этого кода мы получим строку:
Мышь и Кот