⊗ppOpIfInr 65 of 107 menu

PHP-də OOP-də İnterfeyslər

Artıq bildiyiniz kimi, abstrakt siniflər öz varisləri üçün metodlar toplusunu təmsil edir. Bu metodların bir hissəsi özü sinifdə həyata keçirilə bilər, və bir hissəsi isə abstrakt elan edilə bilər və törəmə siniflərdə həyata keçirilməyi tələb edə bilər.

Özümüzü bir vəziyyətdə təsəvvür edək ki, sizin abstrakt sinifiniz yalnız həyata keçirilməmiş abstrakt açıq metodlar toplusunu təmsil edir, həyata keçirilmiş metodlar əlavə etmir.

Əslində sizin valideyn sinfiniz varislərin interfeysini təsvir edir, yəni onların həyata keçirilməsi üçün məcburi olan açıq metodlar toplusunu.

Bu bizə nə üçün lazımdır: proqramlaşdırma zamanı daha az səhv etmək üçün - bütün lazımi metodları valideyn sinifdə təsvir etməklə, biz əmin ola bilərik ki, bütün varislər onları həqiqətən həyata keçirəcək.

Bu nə vaxt kömək edər: tutaq ki, biz öz valideyn sinfimizi və ona bir neçə varis yaratdıq. Əgər sonra müəyyən müddətdən sonra, məsələn, bir aydan sonra, biz başqa bir varis yaratmaq qərarına gəlsək, əlbəttə ki, biz artıq kodumuzun detallarını unudarıq və yeni varisdə bəzi metodların həyata keçirilməsini yazmağı unuda bilərik. Lakin PHP-in özü metodun itirilməsinə imkan verməyəcək - və sadəcə səhv verəcək.

Eyni şey sizin layihənizlə işləyən başqa proqramçı üçün də keçərlidir. Tutaq ki, valideyn sinfin kodunu siz yazmısınız, və sonra həmkarınız başqa bir varis yaratmaq qərarına gəlib. Sizin həmkarınız da bir neçə metodu itirməyi bacarmayacaq.

Lakin bir problem var: əslində biz valideyn sinfimizi onun içində abstrakt açıq metodlar yazmaq üçün etdik, amma biz özümüz və ya həmkarımız bu sinfə təsadüfən açıq olmayan metod və ya abstrakt olmayan metod əlavə etmək imkanına malikik.

Tutaq ki, biz fiziki olaraq valideyndə abstrakt açıq metodlardan başqa metodlar etməyi qadağan etmək istəyirik. PHP-də bunun üçün abstrakt siniflər yerinə interfeyslərdən istifadə edə bilərik.

İnterfeyslər bütün metodları açıq və həyata keçirilməmiş olan sinifləri təmsil edir. Metodların kodunu interfeyslərin varis sinifləri həyata keçirməlidir.

İnterfeyslər adi siniflər kimi elan edilir, amma class sözü əvəzinə interface açar sözündən istifadə edir.

İnterfeyslərdən miras almaq üçün bir az fərqli terminologiya istifadə olunur: deyilir ki, siniflər interfeyslərdən miras almır, onları həyata keçirir. Müvafiq olaraq extends sözü əvəzinə implements açar sözündən istifadə edilməlidir.

İnterfeysin obyektini yaratmaq olmaz. İnterfeysin bütün metodları public kimi elan edilməlidir və həyata keçirilməsi olmamalıdır. İnterfeysdə yalnız metodlar ola bilər, xassələr yox. Həmçinin eyni adla interfeys və sinif yaratmaq olmaz.

azbydeenesfrkakkptruuz