Съдържание
Полиморфизмът е способността на абстрактен клас или конкретен обект да реагира на същия метод със собствено поведение. Полиморфизмът посочва, че предаден или очакван параметър или обекти могат да приемат множество форми и да имат различно поведение със същите методи.Когато извършваме обектно-ориентирано програмиране с полиморфизми, трябва да имаме предвид, че може да се извика екземпляр от клас или обект и той ще работи и ще се държи еднакво, независимо от класа, към който обектът принадлежи. Ако имаме много класове и обекти, трябва да структурираме добре йерархиите на класовете и абстрактните класове. Друго предимство е възможността да се декларират или програмират методи със същото име, въпреки че тяхната функционалност е напълно различна, тъй като се позоваваме на екземпляра на класа.
Да предположим за пример абстрактен клас, който представлява броя превозни средства, които споделят като общи данни нивото на горивото, марката и модела на превозното средство.
Свойствата на класа „Превозни средства“ след това ще бъдат гориво, което ще съдържа броя литри, които са натоварени в превозното средство и марка и модел превозно средство.
По -долу дефинираме общите методи за всички превозни средства, които ще зареждат гориво, и показваме колко остава, докато се използва, освен това трябва да можем да присвоим на всяко превозно средство марка и модел и да можем да се консултираме и с неговата марка и модел . След това дефинираме методите за класа Vehicles.
гориво = $ гориво; } обществена функция show fuel () {return $ this-> гориво; } обществена функция assignvehicle ($ brand, $ model) {$ this-> brandymodel = $ brand. ' '. $ модел; } обществена функция showbrandmodel () {връщане $ this-> markandmodel; }}?> var13 ->След това ще започнем да създаваме класовете, които наследяват от превозни средства и те ще имат своите специфични методи, например създаваме класа Cars, той ще има свойството да напредва в колата и всеки път, когато напредва, ще консумира литър гориво (така че упражнението да се разбира лесно)
клас Автомобили разширява Превозното средство {обществена функция advance () {// на всеки 10 километра изразходва литър $ това-> гориво - = 1; }} // Краен класСега ще внедрим общ клас за водача на превозното средство, тук вземаме предвид, че един водач или няколко могат да управляват различни превозни средства.
В този клас ще дефинираме конструктор от общ или абстрактен тип
функция __construct ($ object_parameter) {$ this-> myobject = $ object_parameter}Така че след това можем да манипулираме всеки обект, който се предава като параметър на конструктора, така че нашият клас ще има възможност да получи обект като параметър, това е полиморфизъм, тоест може да използва цели обекти, например можем да изпратим класът autos като параметър и използва всички свои методи.
Ще приложим примерите в php 5, така че е важно да запомните обхвата на метода и променливите, в повечето езици той е много подобен. За да присвоим или променим обхвата на променлива или свойство, трябва да използваме съответната запазена дума, когато декларираме променливата или метода според достъпа или обхвата, който искаме да има:
- частен: показва, че променливата или методът могат да бъдат достъпни само чрез методите на класа, към който принадлежи обектът, а не от други.
- защитени: показва, че променливата или методът са достъпни чрез методите на, а също и от някой от нейните подкласове, който принадлежи към този клас.
- публично: показва, че променливите или методите са достъпни от всеки друг метод или независимо къде принадлежат или на кого принадлежат. Бъдете внимателни с публичните атрибути, тъй като те могат да променят стойност, която също се използва от друг клас или друг метод.
След това създаваме клас „Шофьор“, който ще има следните методи: зареждане на гориво, задаване на превозно средство, преглед на марката и модела, авансово превозно средство и проверка на оставащото гориво в хода му.
превозно средство = $ обект; } обществена функция натоварване с гориво ($ гориво) {$ това-> превозно средство-> зареждане с гориво ($ гориво); } обществена функция assignvehicle ($ make, $ model) {$ this-> vehicle-> assignvehicle ($ make, $ model); } обществена функция brandymodel () {return $ this-> vehicle-> showbrandmodel (); } обществена функция advancevehicle () {$ this-> vehicle-> advance (); } обществена функция гориво остава () {връщане $ this-> превозно средство-> показване на гориво (); }}?> var13 ->Можем да видим как във всяка функция на класа Cars създаваме обикновени методи на класа Super Vehicles, за да присвояваме свойства или методи, които са специфични и не са общи за всички превозни средства.
Нека да видим по -нататък как да използваме тези класове и самия полиморфизъм.
присвояване на превозно средство („Ferrari“, „550 MARANELLO“). “Нека видим по -нататък истинските предимства на полиморфизма и наследяването на класове, нека добавим класа към
'; // Показваме зададеното превозно средство echo $ ferrari-> brandymodel (). '
'; // Зареждаме гориво в превозното средство, като посочваме количеството в литри ехо „Натоварване с гориво“. $ Ferrari-> зареждане с гориво (50). “
'; // Показваме текущото количество гориво ехо „Текущо гориво“. $ Ferrari-> оставащо гориво (). ' литра
'; echo 'Предварително превозно средство
'; $ ferrari-> advanceVehicle (); echo $ ferrari-> brandymodel (). ' имате '. $ ferrari-> оставащо гориво ().' литра гориво
'; // Създаваме друг екземпляр с друго превозно средство, например можем да създадем променлива, която е марка и патент $ hondaHB0071 = нов драйвер (нови автомобили); echo $ hondaHB0071-> assignvehicle ('Honda', 'ACCORD'). '
'; echo $ hondaHB0071-> makeandmodel (). '
'; echo 'Натоварване с гориво'. $ hondaHB0071-> зареждане с гориво (50). '
'; ехо „Текущо гориво“. $ hondaHB0071-> оставащо гориво (). ' литра
'; echo 'Advance Honda превозно средство
'; $ hondaHB0071-> advanceVehicle (); echo $ hondaHB0071-> makeandmodel (). ' имате '. $ hondaHB0071-> оставащо гориво ().' литра гориво
'; ?> var13 ->
// Клас мотоциклети Мотоциклети разширява Превозното средство {public function advance () {// на всеки 10 километра изразходва литър $ това-> гориво - = 1; }} $ moto = нов шофьор (нови мотоциклети); echo $ moto-> присвояване на превозно средство ('Yamaha', 'YBR 125'). 'Тук можем да видим как успяхме да приложим разширение на същия клас чрез полиморфизъм повторно използване на родителския клас Превозни средства и методите и свойствата, които имат общ автомобил и мотоциклет, въпреки че се държат по различен начин, в този случай можем да видим, че капацитетът на горивото е различен.
'; echo $ moto-> makeymodel (). '
'; echo 'Натоварване с гориво'. $ мотоциклет-> зареждане с гориво (10). '
'; ехо „Текущо гориво“. $ moto-> оставащо гориво (). ' литра
'; echo 'Напредък на мотоциклет
'; $ moto-> advanceVehicle (); echo $ moto-> makeymodel (). ' напуснахте '. $ moto-> fuelremaining ().' литра гориво
'; ?> var13 ->
Можем да включим необходимите изчисления, за да направим разхода на гориво по -реален според превозното средство.
Предимството на използването на полиморфизъм е, че можем да създадем подобни методи, но с различни параметри например.
Внедряване на интерфейси с pHp
Интерфейсите са декларации, които определят какви методи могат да бъдат внедрени от клас, криейки как тези методи се използват или управляват. Методите, които са декларирани в интерфейс, трябва да бъдат публични, за да бъдат достъпни от класовете, които прилагаме. Те позволяват капсулиране на класове и полиморфизми.
За реализиране на интерфейс с php се използва ключовата дума implements. Ако имаме няколко метода, декларирани в интерфейс, те трябва да бъдат внедрени в клас. Класовете могат да реализират повече от един интерфейс, за да имат достъп до различни методи, така че да можем да имаме различни функционалности в различните класове.
Виждаме пример за интерфейси
Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка