Модифікатори доступу в php

Модифікатори доступу в PHP

Відео: ООП в PHP - Модифікатори доступу. Інкапсуляція. Спадкування. поліморфізм

модифікатори доступу - це, по суті, інтерпретація інкапсуляції в ООП. Нагадую, що інкапсуляція - це механізм приховування реалізації об`єкта. Простий приклад з життя. Багато з Вас їздять в метро, ​​і Ви спочатку проходите через турнікети, прикладаючи до них спеціальний квиток. Потім, якщо на Вашому квитку ще залишилися поїздки, то турнікет Вас пропускає, а якщо немає, то пищить і не пропускає. Ви замислювалися над тим, чому так відбувається? Ви замислювалися над тим, як він визначає, скільки поїздок ще залишилося, як він подає сигнали на відкриття або подає сигнал на писк? Я думаю, що більшість з Вас навіть про це не думала. Чому? Так, тому що реалізація для Вас прихована. Все, що Ви бачите так це те, що турнікет працює і все. А як він працює Ви не знаєте, і найголовніше, що Ви і знати не повинні. Ось це і є приклад інкапсуляції - приховування реалізації об`єкта від об`єкта, який його використовує. І для реалізації інкапсуляції існують модифікатори доступу в PHP.

В PHP є три модифікатора доступу:

  1. Public
  2. Protected
  3. Private

Почнемо з модифікатора доступу public. Даний модифікатор означає, що властивість, метод або конструктор будуть доступні для всіх об`єктів, які їх використовують.

Модифікатор доступу protected означає, що даний елемент об`єкта може бути використаний тільки в самому об`єкті, а також в його дочірніх.

І наостанок, модифікатор доступу private означає, що даний елемент об`єкта може бути використаний тільки в самому об`єкті і ніде більше.




Давайте продовжимо займатися класами по автомобілям і реалізуємо їх заново, але з використанням модифікаторів доступу. Нагадую, що раніше ми використовували тільки public, що не є добре. Отже, абстрактний клас, який відповідає за "автомобіль":

lt ;?php
abstractclassCar{
protected $ x-
protected $ y-
publicfunction __construct($ x, $ y){
$ this
-gt;x = $ x-
$ this
-gt;y = $ y-
}
abstractpublicfunction move ($ x, $ y) -
abstractprotectedfunction sound() -
}
?gt;

Як бачите, ми зробили властивості об`єкта Car захищеними (protected), Тобто вони тепер доступні тільки всередині самого класу Car, а також у всіх його спадкоємців. Також ми закрили службову функцію sound (), зробивши її також protected. Все інше (конструктор і метод move ()) Ми залишили відкритими, тобто public. Іноді все-таки буває потрібно мати доступ до властивостей, проте, робити їх відкритими зовсім не хочеться. Тоді додають так звані методи get і set:

lt ;?php
abstractclassCar{
protected $ x-
protected $ y-
publicfunction __construct($ x, $ y){
$ this
-gt;x = $ x-
$ this
-gt;y = $ y-
}
publicfunction getX(){
return $ this-gt;x-
}
publicfunction getY(){
return $ this-gt;y-
}
publicfunction setX($ x){
$ this
-gt;x = $ x-
}
publicfunction setY($ y){
$ this
-gt;y = $ y-
}
abstractpublicfunction move ($ x, $ y) -
abstractprotectedfunction sound() -
}
?gt;



Таким чином, ми тепер можемо спокійно отримувати повний доступ до всіх властивостей на читання і на запис.

Відео: Урок 09. PHP - ООП. Спадкування (extends). Ключове слово "parent ::"

Тепер клас "Auto", Що відповідає за легковий автомобіль:

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-
}
protectedfunction sound(){
echo
"Звук руху легкового автомобіля
"
-
}
}
?gt;

Тут ми поміняли модифікатор доступу тільки у методу sound ().

І, нарешті, скрипт, який використовує об`єкт Auto.

lt ;?php
require_once
"Auto.php"-
$ auto
=newAuto(10,20) -
echo $ auto
-gt;getX() -
echo
"
"
-
$ auto
-gt;setY(5) -
echo $ auto
-gt;getY() -
echo
"
"
-
echo $ auto
-gt;move(15,15) -
?gt;

Тут ми створили об`єкт Auto. Потім отримали доступ до його властивості X (Нагадую, що модифікатор доступу варто protected, тому писати так не можна: $ Auto-gt; x- - буде помилка). Потім міняємо значення властивості Y на 5. А після викликаємо метод руху. Ви можете все перевірити і переконатися, що все працює як швейцарський годинник.

Відео: Спадкування, доступ protected, перевантаження методу PHP

Таким чином, ми з Вами привели код нашої програми на краще варіанту. Можливо, Ви запитаєте: "А де використовувати модифікатор доступу private?". Використовуйте його завжди, якщо у Вашого об`єкта не буде спадкоємців. Головне, щоб Ви розуміли чітко: службові методи (тобто методи, які не будуть використовуватися за межами класу) - в private (або protected), А методи, які будуть використовуватися за межами класу, необхідно позначити як public. Що стосується конструктора, то Ви можете його помітити як private, якщо не хочете, щоб можна було створити об`єкт (таке часто буває потрібно, наприклад, при реалізації шаблону Singleton, коли від одного класу може бути створений лише один об`єкт на всю програму, втім, це вже інша історія). А з властивостями поступайте так: якщо властивість використовується за межами класу дуже часто, то робіть його public, якщо не використовується взагалі, то private (або protected). Якщо властивість використовується, але досить рідко, то зробіть його private (або protected), Але також реалізуйте методи get і set. От і все.

взагалі, ООП - це дуже складна річ. І для того, щоб оцінити його перевага на практиці, необхідно багато працювати з ним. І, зрозуміло, модифікатори доступу - це те, без чого ООП втратило б майже будь-який сенс. І коли Ви освоїте ООП, то просто не зможете без нього програмувати взагалі. І дуже сподіваюся, що я сьогодні ще трохи наблизив Вас до цього моменту.

Поділися в соціальних мережах:

Схожі
Об`єкт document в jаvascriptОб`єкт document в jаvascript
Як використовувати інтерфейс countable в php.Як використовувати інтерфейс countable в php.
Реалізація редиректу на phpРеалізація редиректу на php
Об`єкт number в jаvascriptОб`єкт number в jаvascript
Модифікатори в регулярних виразахМодифікатори в регулярних виразах
Абстрактні класи в phpАбстрактні класи в php
Метод tostring () в phpМетод tostring () в php
Що таке обіцянки в es6.Що таке обіцянки в es6.
Beepcar - спільні поїздкиBeepcar - спільні поїздки
Об`єкт object в jаvascriptОб`єкт object в jаvascript
» » Модифікатори доступу в php