Ինտերֆեյսներ OOP-ում PHP-ում
Ինչպես արդեն գիտեք, վերացական դասերը ներկայացնում են իրենց ժառանգների համար նախատեսված մեթոդների հավաքածու: Դրանցից մի մասը կարող է իրականացվել հենց դասի մեջ, իսկ մեթոդների մի մասը կարող է հայտարարվել վերացական և պահանջել իրականացում ժառանգ դասերում:
Պատկերացնենք մի իրավիճակ, երբ ձեր վերացական դասը ներկայացնում է միայն վերացական հանրային մեթոդների հավաքածու՝ առանց իրականացումով մեթոդներ ավելացնելու:
Փաստորեն, ձեր ծնողական դասը նկարագրում է ինտերֆեյս ժառանգների, այսինքն՝ դրանց հանրային մեթոդների հավաքածուն, որոնք պարտադիր են իրականացման համար:
Ինչու՞ է դա մեզ անհրաժեշտ. ծրագրավորումը կատարելիս ավելի քիչ սխալներ թույլ տալու համար. նկարագրելով բոլոր անհրաժեշտ մեթոդները ծնողական դասում, մենք կարող ենք վստահ լինել, որ բոլոր ժառանգները դրանք իսկապես կիրականացնեն:
Երբ է դա օգնելու. ենթադրենք, մենք ստեղծում ենք մեր ծնողական դասը և դրա մի քանի ժառանգներ: Եթե ապա որոշ ժամանակ անց, օրինակ, մեկ ամիս հետո, մենք որոշենք ստեղծել ևս մեկ ժառանգ, անկասկած մենք արդեն կմոռանանք մեր կոդի մանրամասները և հավանաբար կկարողանանք մոռանալ գրել ինչ-որ մեթոդի իրականացումը նոր ժառանգում: Սակայն PHP-ն ինքնին չի թույլատրի կորցնել մեթոդը - և պարզապես կտա սխալ:
Նույնը վերաբերում է նաև մեկ այլ ծրագրավորողի, ով աշխատում է ձեր նախագծի վրա: Ենթադրենք, ծնողական դասի կոդը գրել եք դուք, և ապա ձեր գործընկերը որոշել է ստեղծել ևս մեկ ժառանգ: Ձեր գործընկերն նույնպես չի կարողանա կորցնել մի քանի մեթոդ:
Սակայն կա խնդիր. փաստորեն, մենք ստեղծեցինք մեր ծնողական դասը, որպեսզի գրենք դրանում վերացական հանրային մեթոդներ, բայց մենք ինքներս կամ մեր գործընկերը հնարավորություն ունեն պատահականորեն ավելացնելու այս դասում ոչ հանրային մեթոդ կամ ոչ վերացական:
Ենթադրենք, մենք ցանկանում ենք ֆիզիկապես արգելել ծնողի մեջ այլ մեթոդներ կատարել, բացի վերացական հանրայիններից: PHP-ում դրա համար վերացական դասերի փոխարեն կարելի է օգտագործել ինտերֆեյսներ:
Ինտերֆեյսները ներկայացնում են այնպիսի դասեր, որոնց բոլոր մեթոդները հանրային են և չունեն իրականացում: Մեթոդների կոդը պետք է իրականացնեն ինտերֆեյսների ժառանգ դասերը:
Ինտերֆեյսները հայտարարվում են նույն կերպ, ինչպես սովորական
դասերը, բայց օգտագործելով interface
բանալի բառը՝ class բառի փոխարեն:
Ինտերֆեյսներից ժառանգելու համար օգտագործվում է
մի փոքր այլ տերմինաբանություն. ասում են, որ
դասերը չեն ժառանգում ինտերֆեյսներից, այլ իրականացնում
են դրանք: Համապատասխանաբար, extends բառի փոխարեն
պետք է օգտագործել implements բանալի բառը:
Հնարավոր չէ ստեղծել ինտերֆեյսի օբյեկտ: Ինտերֆեյսի բոլոր մեթոդները
պետք է հայտարարվեն որպես public
և չպետք է ունենան իրականացում: Ինտերֆեյսը
կարող է ունենալ միայն մեթոդներ, բայց ոչ հատկություններ:
Նաև հնարավոր չէ ստեղծել ինտերֆեյս և դաս
նույն անունով: