Абстрактні класи в php
Відео: PHP Start | Теорія: Урок 16. ООП # 4. Абстрактний клас, інтерфейс
У минулій статті ми розглянули механізм успадкування класів в PHP. Дійсно, цей механізм дуже класний, однак, давайте замислимося: "Чому ООП настільки зручно?". Я бачив багато суджень, але для мене воно зручно тим, що ООП - це аналог реальному житті. Адже навколо нас одні суцільні об`єкти: дерева, трави, будинки, ліси, автомобілі, дороги та інші об`єкти, які ми щодня бачимо перед своїми очима. І ООП - це механізм, що дозволяє перенести реальність в програмний код, і тоді програма стає дуже простий для використання і розуміння. Також в нашому світі існує багато абстрактних. Наприклад, що таке "ссавець"? Погодьтеся, що це абстрактність, адже не можна однозначно уявити собі ссавець. А ось кішку, яка відноситься до ссавців, вже можна. Безумовно, кішки теж бувають різних порід, тому, в деякому сенсі, і кішка - це не більше, ніж абстрактність. але все залежить від того, наскільки точно Ви хочете описати об`єкти. І для подання абстрактних об`єктів в PHP існує можливість створювати абстрактні класи.
Найголовніше, що необхідно зрозуміти так це те, що не можна створити об`єкти на основі абстрактних класів. Також існує таке поняття як абстрактні методи. абстрактні методи - це методи, реалізації яких ще не існує. Абстрактні методи повинні бути обов`язково реалізовані в класах-спадкоємців.
Для того, щоб закріпити отримані знання, давайте перепишемо задачу з минулої статті, але з використанням абстрактного класу. Почнемо з класу "Car", Що представляє"абстрактний автомобіль"(Файл"car.php"):
lt ;?php
abstractclassCar{
public $ x-
public $ y-
publicfunction __construct($ x, $ y){
$ this-gt;x = $ x-
$ this-gt;y = $ y-
}
abstractpublicfunction move ($ x, $ y) -
abstractpublicfunction sound() -
}
?gt;
Як бачите ми поставили ключове слово "abstract", Що означає, що даний клас є абстрактним. У цьому класі ми реалізували конструктор (нагадую, що створити об`єкт абстрактного класу не можна). Також описали два абстрактних методу. Під описом розуміється визначення модифікатора доступу, назви функції і вхідних параметрів. А реалізовуватися ці методи повинні в класах-спадкоємців.
Тепер подивіться, який вигляд має клас "Легковий автомобіль", Який, в нашому випадку, є вже не абстрактностью, а конкретною моделлю (файл"auto.php"):
lt ;?php
require_once "Car.php"-
classAutoextendsCar{
publicfunction move($ x, $ y){
$ this-gt;sound() -
echo "Рух легкового автомобіля з координат ($ this-gt; x, $ this-gt; y) в координати ($ x, $ y)
"-
$ this-gt;x = $ x-
$ this-gt;y = $ y-
}
publicfunction sound(){
echo "Звук руху легкового автомобіля
"-
}
}
?gt;
В даному прикладі ми реалізували два абстрактних методу, що прийшли з класу "Car", Батька для класу"Auto".
Відео: OOP and Design Patterns (урок 5) - Абстрактні і фінальні класи, інтерфейси
І, нарешті, давайте пограємось з об`єктом "Auto":
lt ;?php
require_once "Auto.php"-
$ auto =newAuto(10,20) -
echo $ auto-gt;x-
echo "
"-
echo $ auto-gt;y-
echo "
"-
$ auto-gt;move(5,15) -
?gt;
Як бачите, ми створили об`єкт "Auto", Вивели його властивості, скористалися методом руху. Нічого складного тут немає.
Можливо, що Ви скажете: "А що покращився-то?". А покращився наступне: ми наблизилися до реальності, а, отже, поліпшили розуміння структури програми, спростили її код. Нерозумно і нерозумно створювати якісь "абстрактні об`єкти", Тим самим, виплоджуючи непотрібні реалізації"абстрактних методів". А наш приклад має мінімум коду, без реалізації абстрактності, яка, в общем-то, і не потрібна.
- Друг навколо
- Що таке dbus
- Як зробити парсер контенту на php
- Що таке spa в веб-розробці.
- Як працювати з класами в ecmascript 2015.
- Як використовувати інтерфейс countable в php.
- Що таке svg? Анімуємо svg об`єкти.
- Що таке троттлінг?
- Nodejs. Що таке потоки і буфери.
- Поради щодо використання умов в php.
- Вивчаємо coffeescript. Класи.
- Функція __autoload в php
- Об`єкт object в jаvascript
- Інтерфейси в php
- Reflection api. Reflectionclass.
- Створення винятків в php
- Поняття ооп в jаvascript
- Створення класу в php
- Об`єкти, прототипи і конструктори в мові jаvascript.
- Створення об`єктів в jаvascript
- Адаптивна верстка