Mult timp în urmă, atunci când clase abstracte și interfețe în PHP nu a fost, se poate face astfel:
Fiecare moștenit de la clasa de animale vor fi obligați să includă punerea în aplicare a metodei spun. cu excepția cazului când este chemat să se întâmple să se prăbușească script-ul. Firește, această abordare este învechită și are multe dezavantaje. În astfel de cazuri, este necesar să se utilizeze clase abstracte sau interfețe.
clase abstracte
exemplu abstract al unei clase nu poate fi creată, deoarece în caz contrar ar putea exista o încercare de a aduce pe această instanță a unei metode abstracte, care este absurd, din moment ce nu are nici o implementare.
Acum clasa, moștenit de la clasa de animale. Va fi necesar să conțină implementarea metodei, sau spune ar trebui să fie declarate abstracte, altfel o eroare va avea loc chiar înainte de executarea script-ul.
/ * * Fatal eroare: Clasa Cat conține 1 metodă abstractă * și, prin urmare, trebuie declarate abstracte sau pune în aplicare * celelalte metode (animale :: spun) * / clasa Cat se extinde animale
In clasa abstracta pot fi declarate ca metode și câmpuri convenționale care pot fi moștenite. În ciuda faptului că o clasă abstractă nu poate avea copii, acesta poate avea un constructor care poate fi folosit pentru a inițializa domeniile de urmașii săi. Adăugați câmpul, păstrând pseudonimul animalului, curtezanele pentru recepție și designer ei în clasa Animal.
Să moștenesc de la mai abstractă clasa clasa noastră animală și de câine. descrie un câine, și se adaugă la ea, și în clasa Cat Say metoda de punere în aplicare. Rețineți că constructorii acestor clase apelează constructorul unui abstract clasa-strămoș.
Este posibil să se pare ciudat că moștenitorii clasei abstracte sunt limitări suplimentare, dar, de fapt, aceste limitări vom juca doar în mâinile. Crearea unei instanțe abstracte de clasă clasă derivată poate fi complet sigur că el a implementat funcționalitatea descrisă în clasa abstractă, iar acum este pentru a fi sigur că aveți metoda necesară de instanță a clasei, puteți face doar sigur că el este moștenitorul unei clase abstracte, în care avem nevoie de o metodă este descrisă. Pentru a face acest lucru, puteți utiliza fie cu operatorul instanceof. sau pentru a specifica tipul metodei argumentul primit.
interfețe
Spre deosebire de clasele abstracte despre interfețe de multe ori spun că clasele lor nu moștenesc, și pune în aplicare sau să pună în aplicare. În cazul în care o clasa care implementeaza interfata, nu puse în aplicare toate metodele interfeței, trebuie să fie abstractă.
Să clasa Animal nostru. care nu conține o metodă spune. CanSay va implementa interfata. clase de câini și pisici, în același timp, să rămână moștenitorii săi de clasă de animale.
Acum, pentru a verifica dacă obiectul poate spune, trebuie să vă asigurați că clasa căreia îi aparține, vinde interfață CanSay. Puteți face acest lucru indicând tipul dorit ca argument al numelui metodei a interfeței, sau folosind operatorul instanceof.
Transferul unei metode abstracte spun într-o clasă a făcut codul nostru mai extensibil. Acum puteți pune în aplicare interfață CanSay și alte clase care nu sunt de clasă mostenitori animale. și funcționalitatea care a fost necesară pentru obiecte, care funcționează, ar putea vorbi (interfața CanSay implementată), nu se va schimba.
De asemenea, trebuie remarcat o altă interfață, spre deosebire de clase abstracte - o clasă poate implementa orice număr de interfețe. Pentru a face acest lucru, ei au nevoie doar pentru a lista de nume, separate prin virgulă, după uneltele de cuvinte cheie. Moștenire același număr de clase abstracte nu pot. Acest lucru se datorează faptului că clase abstracte pot conține diferite implementări nu metode abstracte cu același nume, și în succesiunea acestor clase nu este clar modul în care punerea în aplicare a puilor de a moșteni. Interfața este pus în aplicare metode sunt absente și în cazul în care clasa pune în aplicare mai multe interfețe, care conțin metode abstracte cu același nume, care dintre aceste metode vor fi puse în aplicare în indiferentă clasă.
Într-un sens mai larg, interfața este adesea înțeleasă ca pur și simplu funcțional, divorțat de la punerea în aplicare, adică ceea ce se poate face ceva și nu contează cum face.
Pe aceasta am terminat vă spun despre abstracția ridicată. Ca întotdeauna, vă doresc succes!
Citește în timpul liber ...!
ATP