PHP-тегі ООП-дағы интерфейстер
Өздеріңіз білетіндей, абстрактілі кластар өз мұрагерлері үшін әдістер жиынтығын көрсетеді. Осы әдістердің бір бөлігі кластың өзінде жүзеге асырылуы мүмкін, ал басқа бөлігі абстрактілі болып жарияланып, туынды кластарда жүзеге асырылуды талап етуі мүмкін.
Абстрактілі класыңыз тек абстрактілі жалпыға бірдей әдістер жиынтығын ұсынатын, оның ішінде ешқандай жүзеге асырылған әдістерді қоспаған жағдайды елестетіп көріңіз.
> Іс жүзінде ата-ана класыңыз мұрагерлердің интерфейсін сипаттайды, яғни олардың жүзеге асыру үшін міндетті жалпыға бірдей әдістер жиынтығын.
> Бұл бізге не үшін қажет: бағдарламалау кезінде азырақ қателіктер жіберу үшін - барлық қажетті әдістерді ата-ана класында сипаттап, біз барлық мұрагерлердің оларды шынымен жүзеге асыратынына сенімді бола аламыз.
Бұл қашан көмектеседі: ата-ана класымызды және оған бірнеше туынды кластар жасадық делік. Бір ай өткен соң, мысалы, біз тағы бір туынды жасауды шешсек, кодтың егжей-тегжейлерін мүлдем ұмытып кетуіміз әбден мүмкін және жаңа туындыда қандай да бір әдісті жүзеге асыруды ұмытып қалуымыз мүмкін. Алайда, PHP-тің өзі әдісті жоғалтуға жол бермейді - және жай қателік шығарады.
Дәл осылай басқа бағдарламашыға да қатысты, яғни сіздің жобаңызбен жұмыс істейтін адамға. Ата-ана класының кодын сіз жаздыңыз делік, содан кейін сіздің әріптесіңіз тағы бір туынды жасауды шешті. Сіздің әріптесіңіз де бірнеше әдісті жоғалтуға мүмкіндігі болмайды.
> Алайда, мәселе бар: іс жүзінде біз ата-ана класымызды онда абстрактілі жалпыға бірдей әдістерді жазу үшін жасадық, бірақ біз өзіміз немесе әріптесіміз осы класста кездейсоқ жалпыға бірдей емес әдісті немесе абстрактілі емес әдісті қосу мүмкіндігіне ие.
Ата-ана класында абстрактілі жалпыға бірдей әдістерден басқа әдістерді жасауды физикалық түрде тыйым салуды қалайық делік. PHP-те бұл үшін абстрактілі кластардың орнына интерфейстерді қолдануға болады.
Интерфейстер - бұл барлық әдістері жалпыға бірдей және жүзеге асырылуы жоқ кластар. Әдістердің кодын интерфейстердің туынды кластары жүзеге асыруы керек.
Интерфейстер кәдімгі кластар сияқты жарияланады,
бірақ class сөзінің орнына interface кілт сөзін қолданады.
Интерфейстерден мұрагерлікке бөлек
терминология қолданылады: кластар интерфейстерден мұраланбайды, деп айтылады, оның орнына оларды жүзеге асырады.
>
Сәйкесінше, extends сөзінің орнына
implements кілт сөзі қолданылуы керек.
Интерфейс нысанын жасау мүмкін емес.
Интерфейстің барлық әдістері
public ретінде жариялануы керек және жүзеге асырылуы болмауы керек.
Интерфейсте тек әдістер болуы мүмкін, бірақ қасиеттер болмауы керек.
Сондай-ақ, бір атаумен интерфейс пен класты жасау мүмкін емес.