PHP да ООП да интерфейслар
Сиз билланосиз, абстракт класслар ўзларининг авлодлари учун методлар тўпламини ифодалайди. Ушбу методларнинг бир кисми классининг ўзида амалга оширилиши мумкин, бошқа бир кисми эса абстракт эълон қилиниб, авлод классларда амалга оширилиши талаб қилиниши мумкин.
Ўзингизнинг абстракт классингиз фақат абстракт оммавий методлар тўпламини ифодаловчи, амалга ошириш билан методлар қўшмайдиган ҳолатни тасаввур қилиб кўрамиз.
Аслида, сизнинг ота-она классингиз авлодларининг интерфейсини, яъни уларнинг амалга ошириш учун мажбурий бўлган оммавий методлар тўпламини тавсифлайди.
Бу бизга нимaga керак: дастурлашда камроқ хатолар қилиш учун - ота-она класидаги барча зарур методларни тавсифлаб, биз барча авлодлар уларни чиндан ҳам амалга оширишига ишонч ҳосил қиламиз.
Бу қачон ёрдам беради: биз ўзимизнинг ота-она класимизни яратсак ва унга бир нечта авлод яратсак. Кейин, масалан, бир ойдан сўнг, биз яна бир авлод яратмоқчи бўлсак, эҳтимол биз код деталларини унутиб қўямиз ва янги авлодда бирор методни амалга оширишни унутишимиз мумкин. Аммо PHPning ўзи методни йўқотишга йўл қўймайди - ва фақат хатоликни кўрсатади.
Худди шу сизнинг лойиҳангиз билан ишлаётган бошқа дастурчига тегишли. Ота-она класси кодини сиз ёзган бўлсин, сўнг сизнинг ҳамкасингиз яна бир авлод яратмоқчи бўлсин. Сизнинг ҳамкасингиз ҳам бир-иккита методни йўқота олмайди.
Аммо, муаммо бор: аслида биз ота-она класимизни унда фақат абстракт оммавий методлар ёзиш учун яратдик, лекин бизнинг ўзимиз ёки ҳамкасимиз ушбу классга оммавий бўлмаган метод ёки абстракт бўлмаган методни tasodifan qo'shish imkoniyatiga ega.
Биз ота-онада абстракт оммавий методлардан бошқа методлар қилишни жисмонан манъ этишни истаймиз. PHP да бу учун абстракт класслар ўрнига интерфейслардан фойдаланишимиз мумкин.
Интерфейслар барча методлари оммавий бўлган ва амалга оширилмаган класслардир. Методлар коди интерфейсларнинг авлод класслари томонидан амалга оширилиши керак.
Интерфейслар оддий класслар каби эълон қилинади, лекин class сўзи ўрнига
interface калит сўзидан фойдаланилади.
Интерфейслардан мерос олиш учун бир оз бошқа терминологія қўлланилади: класслар
интерфейслардан мерос олмайди, балки уларни амалга оширади, дейилади.
Шу sababli extends сўзи ўрнига implements калит сўзи ишлатилиши керак.
Интерфейс объектини яратиб бўлмайди. Интерфейснинг барча методлари public сифатида
эълон қилиниши керак ва амалга оширилиши бўлмаслиги керак. Интерфейсда фақат методлар
бўлиши мумкин, хусусиятлар эмас. Шунингдек, бир хил номга эга бўлган интерфейс ва классни
ятиб бўлмайди.