Запіс на курсы па HTML, CSS, JavaScript, PHP, Python, фрэймворкам і CMS,
а таксама: дапамога ў пошуку працы і заказаў, стажыроўка на рэальных праектах→
⊗ppOpIfInr 65 of 107 menu

Інтэрфейсы ў ААП у PHP

Як вы ўжо ведаеце, абстрактныя класы ўяўляюць сабой набор метадаў для сваіх нашчадкаў. Частка гэтых метадаў можа быць рэалізавана ў самім класе, а частка метадаў можа быць аб'яўлена абстрактнымі і патрабаваць рэалізацыі ў даччыных класах.

Уявім сабе сітуацыю, калі ваш абстрактны клас уяўляе сабой толькі набор абстрактных публічных метадаў, не дадаючы метады з рэалізацыяй.

Фактычна ваш бацькоўскі клас апісвае інтэрфейс нашчадкаў, гэта значыць набор іх публічных метадаў, абавязковых для рэалізацыі.

Навошта нам такое трэба: каб пры праграмаванні рабіць меней памылак - апісаўшы ўсе неабходныя метады ў класе-бацьку, мы можам быць упэўненымі ў тым, што ўсе нашчадкі іх сапраўды рэалізуюць.

Калі гэта дапаможа: хай мы створым наш клас-бацька і некалькі нашчадкаў да яго. Калі потым праз некаторы час, напрыклад, праз месяц, мы вырашым стварыць яшчэ аднаго нашчадка, напэўна мы ўжо забудзем дэталі нашага кода і цалкам можам забыцца напісаць рэалізацыю якога-небудзь метаду ў новым нашчадку. Аднак сам PHP не дазволіць страціць метад - і проста выдасць памылку.

Тое ж самае тычыцца іншага праграміста, які працуе з вашым праектам. Хай код класа-бацькі пісалі вы, а затым ваш калега вырашыў стварыць яшчэ аднаго нашчадка. У вашага калегі таксама не атрымаецца страціць пару метадаў.

Ёсць, аднак, праблема: фактычна мы зрабілі наш клас-бацька для таго, каб пісаць у ім абстрактныя публічныя метады, але мы самі ці наш калега маем магчымасць выпадкова дадаць у гэты клас не публічны метад ці не абстрактны.

Хай мы хочам фізічна забараніць рабіць у бацьку іншыя метады, акрамя абстрактных публічных. У PHP для гэтага замест абстрактных класаў можна выкарыстоўваць інтэрфейсы.

Інтэрфейсы ўяўляюць сабой класы, у якіх усе метады з'яўляюцца публічнымі і якія не маюць рэалізацыі. Код метадаў павінны рэалізоўваць класы-нашчадкі інтэрфейсаў.

Інтэрфейсы аб'яўляюцца так жа, як і звычайныя класы, але выкарыстоўваючы ключавое слова interface замест слова class.

Для наследавання ад інтэрфейсаў выкарыстоўваецца трохі іншая тэрміналогія: кажуць, што класы не наследуюць ад інтэрфейсаў, а рэалізуюць іх. Адпаведна замест слова extends след выкарыстоўваць ключавое слова implements.

Нельга стварыць аб'ект інтэрфейса. Усе метады інтэрфейса павінны быць аб'яўлены як public і не павінны мець рэалізацыі. У інтэрфейса могуць быць толькі метады, але не ўласцівасці. Нельга таксама зрабіць інтэрфейс і клас з адным і тым жа назвай.

byenru