Interfaces katika OOP kwenye PHP
Kama unavyojua tayari, abstract classes zinawakilisha seti ya mbinu kwa vizazi vyake. Sehemu ya mbinu hizi inaweza kutekelezwa kwenye class yenyewe, na sehemu ya mbinu inaweza kutangazwa kuwa abstract na kuhitaji utekelezaji katika classes za vizazi.
Wacha tujisitue katika hali ambapo abstract class yako inawakilisha tu seti ya mbinu za abstract za umma, bila kuongeza mbinu zilizo na utekelezaji.
Kwa kweli class yako ya mzazi inaelezea interface ya vizazi, yaani seti ya mbinu zao za umma, zinazohitajika kwa utekelezaji.
Kwa nini tunahitaji hii: ili wakati wa programu tufanye makosa machache - kwa kuelezea mbinu zote muhimu katika class ya mzazi, tunaweza kuwa na uhakika kwamba vizazi vyote kwa hakika vitatekeleza.
Hii itasaidia lini: wacha tuunde class yetu ya mzazi na vizazi kadhaa kwake. Kisha baada ya muda, kwa mfano, baada ya mwezi, tunaweza kuamua kuunda kizazi kingine cha ziada, hakika tutasahau maelezo ya code yetu na kwa urahisi tunaweza kusahau kuandika utekelezaji wa baadhi ya mbinu katika kizazi kipya. Hata hivyo, PHP yenyewe haitaruhusu kupoteza mbinu - na itatoa tu hitilafu.
Vile vile inahusu programmer mwingine, anayefanya kazi na mradi wako. Wacha code ya class ya mzazi iliandikwa na wewe, na kisha mwenzio aliamua kuunda kizazi kingine cha ziada. Mwenzio pia hataweza kupoteza mbinu kadhaa.
Kuna, hata hivyo, tatizo: kwa kweli tulifanya class yetu ya mzazi ili tuandike mbinu za abstract za umma ndani yake, lakini sisi wenyewe au mwenzio tuna uwezekano wa kwa bahati mbaya kuongeza kwenye class hii mbinu isiyo ya umma au isiyo abstract.
Wacha tutake kwa kifiziki kuzuia kufanya katika mzabi mbinu zingine, isipokuwa abstract za umma. Katika PHP kwa hili badala ya abstract classes tunaweza kutumia interfaces.
Interfaces zinawakilisha classes, ambazo mbinu zote ni za umma na zisizo na utekelezaji. Code ya mbinu inapaswa kutekelezwa na classes-vizazi vya interfaces.
Interfaces hutangazwa kama vile classes za kawaida,
lakini kwa kutumia neno kuu interface
badala ya neno class.
Kwa kurithi kutoka kwa interfaces hutumiwa
istilahi tofauti kidogo: husemwa kuwa
classes hazirithi kutoka kwa interfaces, bali hutekeleza
zile. Ipasaivyo badala ya neno extends
inapaswa kutumia neno kuu
implements.
Haiwezekani kuunda kitu cha interface. Mbinu zote
za interface zinapaswa kutangazwa kama public
na hazipaswi kuwa na utekelezaji. Interface
inaweza kuwa na mbinu tu, lakini sio properties.
Pia haiwezekani kufanya interface na class na
jina moja.