Programare orientată pe obiecte pentru dummies php. Fundamentele programării orientate pe obiecte în PHP

11 martie 2010 la ora 11:37

OOP cu exemple (partea 1)

  • Procesul educațional în IT

Prin voința sorții, trebuie să citesc un curs special despre modele de design la o universitate. Cursul special este obligatoriu, prin urmare, studenții care vin la mine sunt foarte diferiți. Desigur, printre ei sunt și programatori practicanți. Dar, din păcate, majoritatea oamenilor au dificultăți în înțelegerea termenilor de bază ai POO.

Pentru a face acest lucru, am încercat să explic cu exemple mai mult sau mai puțin vii Noțiuni de bază OOP (clasă, obiect, interfață, abstractizare, încapsulare, moștenire și polimorfism).

Prima parte de mai jos este despre clase, obiecte și interfețe.
ilustrează încapsularea, polimorfismul și moștenirea

Concepte de bază ale POO

Clasă
Imaginați-vă că proiectați o mașină. Știți că o mașină trebuie să conțină motor, suspensie, două faruri, 4 roți etc. De asemenea, știi că mașina ta trebuie să fie capabilă să accelereze și să încetinească, să facă viraj și să meargă în marșarier. Și, cel mai important, știi exact cum interacționează motorul și roțile, în funcție de ce legi se mișcă arborele cu came și arborele cotit, precum și cum sunt proiectate diferențialele. Sunteți încrezător în cunoștințele dvs. și începeți să proiectați.

Descrieți toate piesele care compun mașina dvs., precum și modul în care aceste părți interacționează între ele. În plus, descrieți ce trebuie să facă utilizatorul pentru ca mașina să frâneze sau să pornească faza lunga faruri Rezultatul muncii tale va fi o schiță. Tocmai ați dezvoltat ceea ce se numește în OOP Clasă.

Clasă este un mod de a descrie o entitate care definește o stare și un comportament care depinde de această stare, precum și reguli de interacțiune cu această entitate (contract).

Din punct de vedere al programării, o clasă poate fi considerată ca un set de date (câmpuri, atribute, membri ai clasei) și funcții de lucru cu acestea (metode).

Din punct de vedere al structurii programului, o clasă este un tip de date complex.

În cazul nostru, clasa va afișa o entitate - o mașină. Atributele clasei vor fi motorul, suspensia, caroseria, patru roți etc. Metodele de clasă vor fi „deschideți ușa”, „apăsați pedala de accelerație” și, de asemenea, „pompați o porțiune de benzină din rezervorul de benzină în motor”. Primele două metode sunt disponibile pentru execuție de către alte clase (în special, clasa „Driver”). Acesta din urmă descrie interacțiunile din cadrul clasei și nu este accesibil utilizatorului.

Mai mult, în ciuda faptului că cuvântul „utilizator” este asociat cu Solitaire și „ Microsoft Word", ne vom referi la programatorii care folosesc clasa ta ca utilizatori, inclusiv la tine. Vom numi persoana care este autorul clasei dezvoltator.

Un obiect
Ai făcut o treabă grozavă, iar mașinile dezvoltate conform desenelor tale ies de pe linia de asamblare. Iată-i, stând în rânduri îngrijite în curtea fabricii. Fiecare dintre ele repetă exact desenele tale. Toate sistemele interacționează exact așa cum ați proiectat. Dar fiecare mașină este unică. Toate au numere de caroserie și de motor, dar aceste numere sunt toate diferite, mașinile diferă ca culoare, iar unele chiar au piese turnate în loc de roți ștanțate. Aceste mașini sunt în esență obiecte din clasa ta.

Obiect (instanță) este un reprezentant individual al unei clase care are o stare și un comportament specific care sunt în întregime determinate de clasă.

Vorbitor într-un limbaj simplu, un obiect are valori specifice de atribut și metode care operează pe acele valori pe baza regulilor definite în clasă. ÎN în acest exemplu, dacă o clasă este o mașină abstractă din „lumea ideilor”, atunci un obiect este o mașină de beton care stă sub geamurile tale.

Interfață
Când ne apropiem de o mașină de cafea sau ne urcăm la volan, începem o interacțiune cu ei. De obicei, interacțiunea are loc folosind un anumit set de elemente: un slot pentru acceptarea monedelor, un buton pentru selectarea unei băuturi și un compartiment pentru distribuirea unui pahar într-o mașină de cafea; volan, pedale, schimbător de viteze într-o mașină. Există întotdeauna unele set limitat controale cu care putem interacționa.

Interfață este un set de metode de clasă care sunt disponibile pentru utilizare de către alte clase.

Evident, interfața unei clase va fi setul tuturor ei metode publiceîmpreună cu un set de atribute publice. În esență, o interfață specifică o clasă, definind clar totul acțiuni posibile peste ea.
Un bun exemplu de interfață ar fi bord mașină, care vă permite să apelați metode precum creșterea vitezei, frânarea, virajul, schimbarea vitezelor, aprinderea farurilor etc. Adică toate acțiunile pe care o altă clasă (în cazul nostru, șoferul) le poate efectua atunci când interacționează cu mașina.

Când descrieți o interfață de clasă, este foarte important să găsiți un echilibru între flexibilitate și simplitate. O clasă cu o interfață simplă va fi ușor de utilizat, dar vor exista probleme pe care nu le poate rezolva. În același timp, dacă interfața este flexibilă, atunci cel mai probabil va consta suficient metode complexe Cu o cantitate mare parametri care vă vor permite să faceți multe, dar folosirea acestuia va fi plină de mari dificultăți și riscul de a greși amestecând ceva.

Exemplu interfață simplă poate servi o mașină cu transmisie automată. Orice blondă care a absolvit un curs de conducere de două săptămâni va putea să-și stăpânească funcționarea foarte repede. Pe de altă parte, pentru a stăpâni controlul unei aeronave moderne de pasageri, ai nevoie de câteva luni, sau chiar ani de antrenament intens. Nu mi-aș dori să fiu la bordul unui Boeing pilotat de cineva care are două săptămâni de experiență în zbor. Pe de altă parte, nu vei primi niciodată o mașină care să decoleze și să zboare de la Moscova la Washington.

De la autor: programarea profesională modernă este pur și simplu de neconceput fără programarea orientată pe obiecte, care a devenit în secret un fel de standard limbi de nivel înalt programarea și, desigur, PHP nu face excepție. Dar se întâmplă că trecerea de la un stil procedural de programare la unul bazat pe obiecte este însoțită de unele dificultăți pentru începători, așa că astăzi ne vom uita la elementele de bază ale OOP PHP.

În primul rând, să ne uităm la principalele avantaje ale abordării orientate pe obiecte pentru a înțelege de ce a devenit atât de răspândită.

Codul abordării orientate pe obiecte este destul de ușor de înțeles și citit și este excelent pentru implementarea proiectelor la scară largă și foarte complexe.

Aplicațiile scrise folosind această abordare de programare sunt ușor modernizate și extinse.

Aplicațiile proiectate corespunzător constau în module individuale, ceea ce înseamnă că, dacă este necesar, pot fi rapid rafinate și actualizate, ceea ce mărește viteza de dezvoltare cu câteva ordine de mărime.

Acum că principalul punctele forte stilul de codare în cauză sunt definite, puteți merge direct la subiect această lecție.

Deci, baza programării orientate pe obiecte în PHP este principiul legării datelor și funcțiilor care le manipulează în obiecte corespunzătoare. Ceea ce este oarecum diferit de abordarea procedurală obișnuită, în care elementele similare sunt definite separat unele de altele. Adică, obiectele conțin unele informații care sunt stocate în proprietățile sale (așa se numesc variabilele obiect) și set specific acțiuni care sunt descrise în metodele sale (în esență, funcții obișnuite). În acest caz, metodele, de regulă, în activitatea lor operează pe datele stocate în proprietăți, ceea ce implică atât citirea, scrierea, cât și modificarea.

În consecință, putem spune că baza metodologiei de programare orientată pe obiecte în PHP este lucrul cu obiecte sau folosirea acestora pentru a manipula date.

În acest caz, obiectul este format dintr-o clasă definită anterior, iar aceasta din urmă descrie complet structura sa și acționează ca un fel de șablon. Cu alte cuvinte, clasa descrie proprietățile și metodele obiectelor create în viitor. Și acest lucru poate fi văzut în exemplul următor.

clasă Client ( public $nume; protejat $comenzi; funcția publică __construct($nume, $comenzi) ( $this->name = $name; $this->comenzi = $comenzi; ) public function getName() ( returnează $this ->nume; ) ) $client = client nou("Ben", array("id" => 10)); echo $client->getName();

clasa client(

public$name;

$comenzi protejate;

funcția publică __construct ($nume, $comenzi) (

$acest -> nume = $nume ;

$ asta -> comenzi = $ comenzi ;

funcția publică getName() (

returnează $acest -> nume ;

$client = client nou ("Ben", array("id" => 10));

echo $client -> getName();

Când se implementează o instanță a unei clase (adică se creează un nou obiect folosind o anumită clasă de interes), se formează un nou obiect și se determină și proprietățile descrise în clasă. În plus, o metodă specială numită __construct() este lansată pentru execuție, cu excepția cazului în care, desigur, este descrisă în structura clasei. După cum puteți vedea, pentru a crea un obiect, acesta este folosit cuvânt cheie nou urmat de numele clasei. În paranteze, dacă este necesar, argumentele sunt transmise metodei de mai sus, care, de regulă, definește unele date inițiale pentru viitorul obiect.

În exemplul de mai sus, pe lângă crearea unui obiect, este apelată metoda getName() și este afișată valoarea pe care o returnează. Desigur, ca rezultat al operațiunii scriptului, vom vedea rezultatul numelui de utilizator - „Ben”, deoarece acesta este transmis ca prim argument la metoda constructorului, unde este scris în proprietatea clasei sub numele numelui. În consecință, metoda de mai sus returnează valoarea a acestei proprietati.

În același timp, nimeni nu vă interzice să creați un alt obiect similar din clasa descrisă anterior:

$client2 = client nou ("Sem", array ("id" => 15)); echo $client2->getName();

$client2 = client nou ("Sem", array ("id" => 15));

echo $client2 -> getName();

În acest caz, pe ecran vom vedea numele unui utilizator complet diferit - „Sem”. Astfel, în esență, am creat un obiect complet diferit din același șablon - o clasă. În același timp, a acestui obiect, date inițiale complet diferite, care sunt încă formate prin metoda constructorului, ceea ce înseamnă că comportamentul acesteia, determinat de metode, va fi și el diferit.

Vă rugăm să rețineți că proprietățile unei clase și metodele sale pot fi utilizate numai cu un anumit obiect - exact asta se poate vedea în exemplu și, fără el, sunt absolut inutile în ceea ce privește lucrul în afara clasei, deoarece în interiorul clasei. clasa, desigur, ele pot fi utilizate în codul metodelor sale. Mai mult, accesul la elementele de mai sus ale obiectului se realizează prin set special semnele „->” (săgeată), înainte de care trebuie să indicați obiectul de interes sau indicatorul obiectului - cuvântul cheie $this. Pointer-ul obiect $this este folosit în codul de metode direct în interiorul clasei pentru a accesa proprietățile sau metodele acesteia.

Și din nou, vedem că baza dezvoltării OOP în PHP este lucrul cu obiecte, iar frumusețea este că descriem clasa o dată, ceea ce înseamnă că formăm un anumit set de date și funcționalitatea necesară. Și apoi creăm obiecte, fiecare dintre acestea, în funcție de datele inițiale, va fi, de fapt, absolut unic.

Din cele de mai sus, rezultă că clasa, pe baza cărora vor fi create obiecte, descrie datele și funcționalitatea unei anumite entități a viitorului proiect, de exemplu, lucrul cu utilizatori, pagini, meniuri, adrese etc. Și, desigur, dacă există mai multe astfel de entități, atunci trebuie create mai multe clase, ceea ce înseamnă că cel puțin un obiect va fi creat pentru fiecare dintre ele. Deși nu întotdeauna, uneori unele clase sunt create ca părinți pentru anumite clase de copii, ceea ce înseamnă că acționează ca stocare a unor funcționalități comune, ceea ce implică în mod firesc crearea unei întregi ierarhii de clase pentru viitorul proiect. Dar acesta este un subiect complet diferit, care nu se încadrează în domeniul de aplicare al articolului actual.

De fapt, aici am analizat pe scurt elementele de bază ale programării orientate pe obiecte în PHP. Cu siguranță, acest tip programarea necesită mai multă atenție decât un articol dacă doriți să îl înțelegeți bine și să îl folosiți în munca dvs. Acest subiect este discutat mai detaliat în cursul premium.

Toate cele bune pentru tine și codare fericită!!!

Vom acoperi concepte precum programarea orientată pe obiecte, clase PHP, constructori PHP, destructori PHP, magia metode PHP etc. Acest tutorial este destinat începătorilor și programatorilor cu experiență care doresc să învețe PHP OOP de la un nivel de bază.

Una dintre cele mai mari modificări în PHP 5 este includerea completă model de obiect, care îmbunătățește productivitatea. Unele dintre noile funcții importante adăugate în PHP 5 includ metode finale și abstracte, clase, interfețe, clonare și metode magice. Ne vom uita la acest manual Exemple PHP OOP de utilizare a fiecăruia dintre ele.

În programarea orientată pe obiecte, un obiect este tratat în același mod ca referințele sau pointerii. Aceasta înseamnă că fiecare variabilă nouă conține o referință la obiect, mai degrabă decât o copie a întregului obiect.

Conceptul cel mai dificil de înțeles este elementele de bază ale OOP, deoarece sunt diferite de programarea PHP obișnuită. Dar odată ce înțelegi principiile de bază, modelul în sine va deveni simplu și clar pentru tine.

Ce este OOP în PHP?

Întrucât termenul de programare orientată pe obiecte începe cu cuvântul „obiect”, putem spune că este un tip special de programare în care obiectele sunt create și utilizate.

Iată o explicație a PHP OOP pentru manechin. Uită-te la lumea din jurul nostru, este plină de obiecte. Soare, luna, mașini, copaci, case etc. și așa mai departe. Toate acestea sunt obiecte, au atribute și funcții. În procesul de gândire, operăm cu obiecte. Când vorbim despre o mașină, nu te gândești la roți, la motor, la scaune, la uși, te gândești la mașină ca la ceea ce este. Mai simplu spus, gândești în termeni de subiect sau obiect. Orientarea obiectelor este reprezentarea elementelor ca obiecte în programare.

Mașina este un obiect. Are atributele de culoare, dimensiune, greutate și funcție de mișcare. Orice obiect fără funcționalitate va fi inutil. În POO, programatorul folosește obiecte; fiecare obiect are anumite atribute și funcții. În general, programarea se reduce la construirea de module folosind obiecte.

O definiție simplă a programării orientate pe obiecte:

Programarea orientată pe obiect este programarea bazată pe obiecte care conțin date (atribute) și metode (funcționalitate) care procesează aceste date. Obiectele sunt un tip de date definite de programator și interacțiunile dintre ele diverse obiecte determinate de asemenea de programator.

Cu alte cuvinte, OOP permite programatorului să grupeze sarcini similare în clase, clasa poate conține date și funcții pentru accesarea acestor date, legate între ele.

OOP de bază în PHP vă ajută să dezvoltați cod care este mai ușor de întreținut și gestionat. Cu cât codul este mai curat și mai lizibil, cu atât este mai probabil să fie reutilizat. Ca rezultat, modelele de proiectare pot fi aplicate sistemului. În OOP, modulele sunt create și utilizate conform cerințelor. Cu ajutorul programării orientate pe obiecte în PHP, putem crea aplicații pentru site-uri web care au o structură modulară.

Termeni importanți în tutorialul PHP OOP:

Mai jos este definiție generală niste termeni importanți, care sunt adesea folosite în PHP orientat pe obiecte.

Clasă

În PHP OOP, o clasă este un tip de date definit de programator. Clasa conține date și funcții pentru lucrul cu aceste date. Datele și funcțiile au ID de acces privat. Aceasta înseamnă că nu sunt vizibile în afara clasei. O clasă este un șablon sau șablon din care se pot face atâtea copii sau instanțe cât este necesar.

Un obiect

Un obiect este cunoscut și ca instanță. Când este instalată o instanță a unei clase, este creat un obiect. Dacă o clasă este un eșantion, atunci un obiect este produsul final creat folosind eșantionul. Odată ce o clasă a fost definită, multe obiecte pot fi create din ea.

Variabila membru

Variabilele definite într-o clasă sunt numite variabile membre. De fapt, sunt datele conținute în această clasă, acestea pot fi modificate doar de funcțiile acestei clase. De obicei, variabilele membre sunt vizibile numai pentru acea clasă și sunt ascunse de alte clase.

Funcția de membru

Funcțiile definite într-o clasă sunt numite funcții membru. De asemenea, nu sunt vizibile pentru alte clase. Sunt folosite pentru a schimba variabilele membre pentru a accesa datele obiectului.

Constructor

Un constructor este un tip special de funcție membru. Când o clasă este setată, este creat un obiect, această funcție este apelată automat și atribuită valorile initiale variabile de clasă.

Destructor

Acesta este un tip special de funcție care este apelată automat atunci când un obiect este șters.

Moştenire

În PHP 5 OOP, moștenirea este procesul prin care o clasă (subclasă) primește toate atributele și funcțiile unei alte clase (superclasă).

Super clasa

Cunoscută și ca clasă de bază sau părinte - moștenit de una sau mai multe subclase.

Subclasă

Un copil sau o clasă derivată, o subclasă moștenește de la o superclasă.

Polimorfism

Acesta este un fenomen în POO în care o singură funcție poate fi utilizată în mai multe scopuri.

Încapsulare

Unul dintre cele mai importante concepte în programarea orientată pe obiecte. Datele și funcțiile care funcționează cu aceste date sunt interconectate și nu sunt vizibile pentru alte funcții.

Abstracția

Abstracția înseamnă că detaliile de implementare ale funcțiilor sau claselor nu sunt vizibile.

, ceea ce înseamnă că funcții având aceleasi nume, Dar cantități diferite argumentele sunt executate diferit.

Clase si obiecte:

Clasa și obiectul sunt utilizate pe scară largă ca sinonime în programarea orientată pe obiecte, dar la baza lor sunt foarte diferite unele de altele. O clasă reprezintă un model, un model sau o matriță, iar un obiect este un produs sau o parte turnată din acel model sau matriță.

Să luăm de exemplu o casă. Sala de clasă este fundația căminului; are dimensiuni, forma, numar de usi, treceri etc. Dar acesta este doar un proiect, nu casa în sine. Atunci când o casă fizică este construită pe baza informațiilor conținute în plan, aceasta este un obiect.

Înainte de aceasta, obiectul era un morman de lemn, cărămizi, ciment etc., din care se construia o casă sau un obiect conform informațiilor din plan:

O clasă în PHP OOP este un plan sau șablon conform căruia este instalată o instanță a unei clase și este creat un obiect. Odată ce clasa a fost creată, putem crea câte obiecte dorim. În figura de mai sus, cinci obiecte (case) au fost create dintr-o clasă (plan). Un obiect va urma întotdeauna instrucțiunile date în clasa folosită pentru a-l crea.

Avantajele OOP în PHP:

  1. Arhitectură îmbunătățită și cod mai curat

PHP orientat pe obiecte este mai bine catalogat și ușor de ambalat, permițându-vă să specificați arhitectura optimă. De obicei, fiecare clasă este salvată într-un fișier separat. Limbile procedurale sunt caracterizate de un cod complex, care este foarte greu de citit sau de înțeles. În POO, prin implementarea obiectelor care conțin date private cu definiții clare ale relațiilor dintre obiecte, codul este lizibil și curat.

  1. Reutilizați

Programarea orientată pe obiecte face codul reutilizabil. Obiectele create o dată pot fi folosite din nou și din nou. Programele pot fi construite prin combinarea modulelor de lucru în loc să scrieți totul de la zero. Acest lucru economisește timp și îmbunătățește productivitatea.

  1. Ușor de întreținut și actualizat

Obiectele au propriile lor date și funcții, iar întreaga lor structură este compactă și comprimată, ceea ce facilitează efectuarea modificărilor codului. Programarea procedurală convențională produce cod în care este foarte dificil să găsești un punct pentru a face modificări. În PHP OOP, putem adăuga o nouă proprietate și apoi putem adăuga metode asociate pentru a manipula acea proprietate.

  1. Încapsulare

Încapsularea înseamnă că valorile variabilelor unui obiect nu sunt vizibile din exterior, prin urmare securitatea datelor este implementată. Dar dacă este nevoie, datele pot fi accesate folosind modificatorii de acces. Pentru a crea programe sigure datele și funcțiile membre dintr-o clasă pot fi ascunse de alte clase. Odată ce un obiect este creat, nu sunt necesare informații de implementare pentru a-l utiliza.

  1. Moştenire

Clasa moștenitoare primește toate caracteristicile clasa de părinți, iar apoi i se adaugă propriile caracteristici. Subclasa moștenește variabilele și metodele superclasei. Putem extinde utilizarea claselor existente și, de asemenea, putem elimina codul inutil.

PHP este unul dintre cele mai populare limbaje de scripting programare. Aproape 60% dintre serverele web folosesc PHP Milioane de site-uri web și aplicații web sunt dezvoltate în PHP în fiecare lună.

PHP a fost dezvoltat inițial ca inlocuire usoara Perl și în câțiva ani devenise extrem de puternic și popular. limbaj PHP, în sine este foarte asemănător cu ANSI C.
Unul dintre motivele pentru care PHP a devenit atât de popular este curba sa scurtă de învățare.

Învățarea PHP nu este deloc dificilă, mai ales dacă ești familiarizat cu sintaxa Java sau C.

Deci, cum să scriu Scripturi PHP pur și simplu, oricine poate scrie cod PHP fără a respecta nicio convenție și a amesteca stratul de prezentare cu logica de afaceri (acesta este unul dintre principalele motive ale existenței). cantitate mare proiecte negestionate). Deoarece PHP nu are neapărat convenții stricte de codificare, de-a lungul anilor, pe măsură ce proiectul devine din ce în ce mai mare, devine o aplicație imensă, de negestionat.

OOP sau programarea orientată pe obiecte este bine folosită în practica de programare pentru a crea proiecte mai ușor de gestionat.
Abordarea procedurală presupune scrierea codul programului fără a folosi obiecte. Programarea procedurală presupune scrierea codului cu sau fără rutine.

OOP antrenează orice limbaj de programare pentru a produce un cod de program mai bun și este folosit pentru a produce mai bine performanta ridicatași scrisul proiecte mari, fără teama de a se încurca în managementul lor. OOP vă oferă posibilitatea de a crea obiecte reutilizabile, astfel încât dvs. sau alți dezvoltatori să le puteți utiliza în proiectele lor fără a le reproiecta iar și iar. OOP elimină barierele și complexitatea în scrierea și gestionarea aplicațiilor mari.

PHP ne permite să scriem aplicații în 2 moduri diferite, primul este procedural și al doilea este orientat obiect. Dacă încă nu înțelegeți diferența dintre aceste două abordări, să ne uităm la aceste bucăți de cod - același exemplu scris în abordări diferite.

Procedural:

$user_input = $_POST[‘câmp’];
$conținut_filtrat = filtru ($intrare_utilizator); //filtrarea intrărilor utilizatorului
mysql_connect("dbhost", "dbuser", "dbpassword"); //Bază de date
mysql_select_db("nume db");
$sql = „o interogare”;
$rezultat = mysql_query($sql);
while ($date = mysql_fetch_assoc())
{
proces($date);
}
process_user_input($conținut_filtrat);

Și iată aceeași bucată de cod folosind OOP:

$input_filter = filtru nou();
$input_filter->filter_user_input(); //se filtrează intrările utilizatorului
$db = new dal("mysql"); //stratul de acces la date
$db->connect($dbconfig);//folosim mysql
$rezultat = $db->execute($sql);
ReportGenerator::makereport($rezultat); //prelucrarea datelor
$model = new Postmodel($filtru->get_filtered_content());
$model->inserare();

Dacă te uiți îndeaproape la aceste 2 bucăți de cod, vei observa că codul care utilizează OOP este mai ușor de citit și mai ușor de înțeles.

Codul cu OOP este mai bine organizat deoarece este clar cu ce obiect este procesat. Aplicațiile mari scrise folosind o abordare procedurală devin aproape imposibil de perceput după ce au fost lansate mai multe versiuni. Desigur, puteți urma reguli stricte pentru scrierea codului programului, dar acestea sunt aprobate de milioane de dezvoltatori care știu că acest lucru nu vă va oferi în cele din urmă controlabilitatea și capacitatea de utilizare a proiectului dacă nu utilizați OOP în programul dvs.
Aproape tot aplicații mari scrise folosind orientat obiect
abordare.

Pe baza celor de mai sus, putem extrage avantajele utilizării OOP:

OOP a fost creat pentru a face viața mai ușoară dezvoltatorilor. Folosind POO vă puteți descompune problemele mari în probleme mici, care sunt mult mai ușor de rezolvat.
Principala cerință a OOP: faceți tot ce doriți ca obiecte. Obiectele sunt bucăți mici de cod separate care pot combina date și proprietăți împreună. În aplicații, toate obiectele interacționează între ele.

OOP poate fi considerat mai bun cu laturi diferite, mai ales când timpul de dezvoltare și dezvoltarea ulterioară a aplicației sunt importante pentru dvs.
Principalele avantaje ale utilizării OOP pot fi exprimate astfel:

* Reutilizați: Un obiect este un obiect logic care are un set de proprietăți și metode și poate interacționa cu alte obiecte.Un obiect poate fi complet independent sau poate depinde de alte obiecte. Un obiect este de obicei creat pentru a rezolva probleme specifice. Prin urmare, atunci când alți dezvoltatori întâmpină probleme similare, ei vă pot conecta clasa la proiectul lor și o pot folosi fără teama că nu le va întrerupe procesul de dezvoltare. Acest lucru evită DRY, care înseamnă Don’t Repeat Yourself. În programarea procedurală sau modulară, reutilizare posibilă numai în agregat.

* Refactorizarea: Când trebuie să utilizați refactorizarea într-un proiect, OOP vă oferă avantaje maxime, deoarece toate obiectele sunt elemente mici și își conțin proprietățile și metodele ca parte a lor. Acest lucru face ca refactorizarea să fie relativ ușor de utilizat.

* Extensibilitate: Dacă aveți nevoie să extindeți funcționalitatea proiectului dvs., puteți obține cele mai bune rezultate folosind OOP. Una dintre principalele funcționalități ale OOP este extensibilitatea. Puteți utiliza refactorizarea obiectelor pentru a adăuga funcționalitate. Lucrând la aceasta, puteți salva în continuare
compatibilitatea anterioară a obiectului - prin urmare, puteți lucra bine cu vechiul cod. Sau puteți extinde obiectul și crea unul complet nou, care va conține totul proprietățile necesareși metodele obiectului părinte din care este derivat noul și apoi adăugați-i funcții noi. Aceasta se numește „moștenire” și este o caracteristică foarte importantă a OOP.

* A sustine: codul orientat pe obiecte este mai ușor de întreținut deoarece
urmează convenții de codare foarte stricte și este scrisă într-o manieră auto-explicativă.
De exemplu, atunci când un dezvoltator adaugă, reprelucrează sau depanează cod, el poate găsi cu ușurință structura internă a codului și poate menține codul din când în când. Mai mult, atunci când există o echipă de dezvoltatori POO care lucrează în mediul dvs., poate fi cea mai bună soluție deoarece vă puteți distribui codul între membrii echipei după ce îl împărțiți în părți mici. Aceste piese mici pot fi proiectate ca obiecte individuale, prin urmare, dezvoltatorii pot lucra aproape independent unul de celălalt. În cele din urmă, combinarea tuturor pieselor într-o singură aplicație nu va fi dificilă.

* Eficienţă: Ideea OOP a fost de fapt dezvoltată pentru a crește eficiența și a ușura procesul de dezvoltare. Sunt dezvoltate mai multe modele de design pentru a crea un cod mai eficient și mai bun.
Mai mult, în POO poți reflecta asupra deciziilor tale într-un mod mai convenabil decât într-o abordare procedurală. Pentru că vă împărțiți problema în mai multe probleme mici și găsiți o soluție pentru fiecare dintre ele separat, o problema mare se rezolvă singur.

P.S. primul meu habratopic, dacă vă place, voi traduce cartea în continuare, pentru că pentru mine este destul de interesant și informativ

În acest tutorial veți învăța elementele de bază ale programării orientate pe obiecte în PHP. Veți afla despre principiile OOP în general și veți învăța cum să scrieți scripturi simple în PHP.

Bun venit la prima dintr-o serie de lecții despre POO în PHP! Prin finalizarea tuturor lecțiilor din această serie, veți afla despre principiile și conceptele de bază ale POO și veți învăța cum să creați rapid și ușor aplicatii utileîn PHP.

În acest tutorial voi începe să vă pun la curent și să vă spun despre conceptele de bază ale OOP. O sa inveti:

  • ce este OOP
  • cum vă va ajuta OOP să creați cel mai bun PHP scenarii
  • câteva concepte de bază precum clase, obiecte, metode, variabile de clasă
  • unde sa încep scriind PHP scenariu

Sunteți gata să vă scufundați în lumea obiectelor PHP? Atunci dă-i drumul!

Ce este programarea orientată pe obiecte?

Dacă ați creat și folosit vreodată funcții personalizate în PHP, ați folosit un stil de programare procedurală. ÎN programare procedurală de obicei creați structuri de date - numere, șiruri, matrice etc. - să stocheze unele date, apoi să proceseze aceste structuri funcții speciale, care manipulează aceste date.

Programarea orientată pe obiecte, sau OOP, a avansat deoarece aici stocăm structurile de date și funcțiile care le procesează într-o singură entitate numită obiect. În loc să procesați datele cu o anumită funcție, încărcați acele date într-un obiect și apoi apelați metodele acestuia pentru a le manipula și a obține rezultatul dorit.

Cel mai adesea, obiectele create folosind POO reflectă entități reale. De exemplu, dacă creați un forum pentru site-ul dvs., veți crea un obiect Membru care va stoca informații despre fiecare membru al forumului (nume, autentificare, Adresa de e-mail, parola etc.), precum și metodele care vor prelucra aceste informații (înregistrare, autorizare, deconectare, interzicere etc.).

De ce să folosiți OOP?

Procedural și orientat pe obiecte sunt două căi diferite face acelasi lucru. Acest lucru nu înseamnă că una dintre ele este mai bună decât cealaltă - fiecare scrie așa cum vrea, așa că puteți chiar să combinați cu ușurință aceste două abordări într-un singur scenariu.

Cu toate acestea, iată câteva beneficii ale OOP pentru dezvoltatori:

  • Este mai ușor să reflectați situații reale: așa cum am menționat mai sus, obiectele reflectă entități reale - oameni, produse, carduri, articole de blog etc. Acest lucru simplifică foarte mult sarcina atunci când abia începeți să vă proiectați aplicația, deoarece scopul fiecărui obiect. este ca un scop relațiile dintre obiecte vor fi clare și de înțeles.
  • Este mai ușor să scrieți programe modulare: OOP implică scrierea de module. Împărțind codul în module, vă va fi mai ușor să îl gestionați, să îl depanați și să îl extindeți.
  • Este mai ușor să scrieți cod care va fi folosit de mai multe ori: scrierea unui cod care poate fi folosit de mai multe ori va economisi timp atunci când scrieți o aplicație și, în timp, puteți chiar să creați o bibliotecă întreagă din aceste tipuri de module pe care le puteți utiliza în multe aplicatii. Cu ajutorul OOP, devine relativ mai ușor să scrieți un astfel de cod, deoarece structurile și funcțiile de date sunt încapsulate în un singur obiect, care poate fi folosit de orice număr de ori.

Câteva concepte de bază

Înainte de a începe să scrieți scripturi, trebuie să înțelegeți bine conceptele de clasă, obiect, variabilă de clasă și metodă.

Clase

O clasă este un cadru pentru un obiect. Aceasta este o bucată de cod care definește:

  • Tipurile de date pe care le vor conține obiectele de clasă create
  • Funcții care vor conține aceste obiecte.

Când creați o aplicație OOP, de obicei veți crea mai multe clase care vor reprezenta Tipuri variate entitățile aplicației dvs. De exemplu, pentru a crea un forum, puteți crea clasele Forum, Topic, Post și Member.

Obiecte

Obiectul este o variabilă tip special, care este creat prin clasă. Conține date reale și funcții de manipulare. Puteți crea câte obiecte doriți dintr-o singură clasă. Fiecare funcție a unui obiect este independentă de alt obiect, chiar dacă sunt create din aceeași clasă.

Pentru comparație cu entități reale:

  • O clasă este cadrul pentru o mașină: definește cum va arăta și acționa mașina, dar este totuși o entitate abstractă
  • Un obiect este o mașină reală creată dintr-un cadru: are proprietăți reale (cum ar fi viteza) și comportament (cum ar fi accelerația sau frânarea).

Notă: Un obiect este adesea numit esența unei clase, iar procesul de creare a unui obiect al unei clase se numește implementare.

Variabile de clasă

Valorile datelor care sunt stocate într-un anumit obiect sunt scrise în variabile speciale numite variabile de clasă. Variabilele de clasă sunt strâns asociate cu obiectul său. Chiar dacă toate obiectele unei clase au aceleași variabile, valorile lor pot diferi.

Metode

Funcțiile definite într-o clasă și utilizate pe obiectele acelei clase sunt numite metode. Nu sunt foarte diferite de funcțiile obișnuite - le puteți transmite valori, pot conține variabile locale și pot returna valori. Cu toate acestea, metodele funcționează mai des cu variabile obiect. De exemplu, metoda login() pentru conectarea utilizatorilor în forumul dvs. ar putea seta variabila de clasă loggedIn la true.

Cum se creează o clasă în PHP?

Acum că știți deja ce sunt clasele, metodele, variabilele de clasă și obiectele, este timpul să creați câteva clase și obiecte în cod PHP.

În primul rând, să vedem cum să creăm de fapt o clasă. Practic, scriptul pentru crearea unei clase arată astfel:

Class ClassName ( // (definiția clasei) )

De exemplu, dacă creați o clasă de membru pentru forumul dvs., ați scrie asta:

Membru al clasei ( // (definiția clasei) )

Este destul de simplu. Desigur, această clasă nu va face nimic până când nu adăugați variabile și metode la ea. Cu toate acestea, codul de mai sus creează o clasă PHP validă care poate fi utilizată.

Regula bunelor maniere: plasează fiecare clasă în dosar separat cu același nume cu numele clasei. De exemplu, puneți clasa Member în fișierul Member.php și stocați-o într-un folder, să zicem, clase.

Cum se creează obiecte în PHP?

Puteți crea un obiect folosind cuvântul cheie nou:

Nou ClassName()

Acest cod va crea un obiect din clasa ClassName. Va trebui să utilizați acest obiect mai târziu, așa că trebuie să îl stocați într-o variabilă. De exemplu, să creăm un obiect al clasei Member și să-l stocăm în variabila $member:

$member = membru nou();

De asemenea, putem crea un alt obiect din aceeași clasă:

$member2 = membru nou();

Chiar dacă am creat aceste două obiecte din aceeași clasă, variabilele $member și $member2 sunt independente una de cealaltă.

Creați variabile de clasă

Acum că știm deja cum să creăm clase și obiecte de clasă, să ne uităm la cum să creăm variabile de clasă. Există 3 accesorii pentru variabilele de clasă care pot fi adăugate la o clasă:

  • Variabile de clasă publică (publice): accesibile - i.e. pot fi citite și/sau modificate - oriunde în script, indiferent de locul în care se află acest cod - în interiorul clasei sau în afara acesteia
  • Variabile de clasă privată (private): accesibile numai metodelor de clasă. Cel mai bine este să faceți variabilele de clasă private pentru a separa obiectele de restul codului.
  • Variabile de clasă protejată: disponibile pentru metodele propriei clase, precum și pentru metodele claselor moștenite (vom vorbi mai târziu despre moștenire).

Pentru a crea o variabilă de clasă, scrieți cuvântul cheie public, private sau protected, apoi introduceți numele variabilei:

Clasa ClassName ( public $propertyName; privat $propertyName; protejat $propertyName; )

Să adăugăm o variabilă de clasă publică la clasa noastră Member pentru a stoca numele de utilizator:

Membru al clasei ( public $username = ""; )

Observați că am inițializat variabila noastră de clasă, valoarea acesteia este șirul gol, „”. Aceasta înseamnă că atunci când un utilizator nou este creat, numele de utilizator implicit va fi egal cu linie goală. La fel ca și în cazul variabilelor obișnuite în PHP, variabilele de clasă nu trebuie să fie inițializate, dar este mai bine să nu fii leneș. Dacă nu inițializați o variabilă de clasă, valoarea implicită a acesteia este nulă.

Accesarea variabilelor de clasă

Pentru a obține acces la o variabilă a unui obiect, utilizați operatorul ->:

$object->propertyName

Sa incercam. Să scriem un script care declară o clasă Membru și o variabilă de clasă, creează un obiect al acestei clase și apoi setează valoarea variabilei de clasă și o afișează pe ecran:

nume utilizator = "Fred"; echo $member->nume utilizator; // Tipăriți „Fred” ?>

Alerga acest cod, va afișa șirul „Fred”, valoarea variabilei de clasă $member->username. După cum puteți vedea, operați pe o variabilă obiect la fel ca o variabilă obișnuită - o puteți seta la o valoare și o puteți citi.

Adăugarea de metode la o clasă

Dar crearea de metode? După cum am menționat mai devreme, metodele sunt doar funcții obișnuite care fac parte dintr-o clasă. Deci, s-ar putea să nu fiți surprins că acestea sunt create folosind același cuvânt cheie de funcție. Singura diferență față de crearea de funcții obișnuite este că puteți adăuga și unul dintre identificatorii de acces (public, privat, protejat) la declarația acestuia. În acest fel, metodele sunt similare cu variabilele de clasă:

Clasa ClassName (funcție publică methodName() ( // (cod) ) funcție privată methodName() ( // (cod) ) funcție protejată methodName() ( // (cod) ) )

Notă: la fel ca și în cazul variabilelor de clasă, metodele publice pot fi apelate de oriunde, metodele private pot fi apelate doar în cadrul clasei, iar metodele protejate pot fi apelate din clasa însăși și descendenții acesteia.

Să încercăm să adăugăm câteva metode și variabile de clasă la clasa noastră:

  • variabilă privată de clasă $loggedIn pentru a identifica utilizatorul, de ex. indiferent dacă a intrat sau nu,
  • metoda login(), care se va autentifica în forum setând variabila de clasă $loggedIn la true,
  • metoda logout(), care se va deconecta din forum prin setarea variabilei clasei $loggedIn la false,
  • isLoggedIn(), care va returna valoarea variabilei clasei $loggedIn.

Iată codul nostru:

loggedIn = adevărat; ) funcția publică logout() ( $this->loggedIn = fals; ) public function isLoggedIn() ( returnează $this->loggedIn; ) ) ?>

Poate ați observat că am folosit un nou cuvânt cheie $this. În contextul metodelor unui obiect, variabila specială $this se referă la obiectul însuși. Folosind $this într-o metodă obiect, metoda poate accesa orice variabilă de clasă și metodă a obiectului.

De exemplu, metoda login() poate accesa variabila de clasă $loggedIn a obiectului prin $this->loggedIn.

Apropo, variabila noastră de clasă este privată, deci nu poate fi apelată din nicio parte a scriptului, ci doar din metodele login(), logout() și isLoggedIn(). Aceasta este o abordare bună, deoarece elementele interne ale obiectului (cum ar fi modul în care înregistrează exact dacă utilizatorul este conectat sau nu) este separat de restul codului. Ori de câte ori este posibil, încercați să utilizați variabile de clasă privată, astfel încât obiectele dvs. să fie autonome, mobile și protejate.

Notă: variabila clasa $username din exemplul nostru este publică. Am făcut asta doar pentru a demonstra cum puteți accesa variabilele clasei unui obiect. În proiectele reale, preferați să faceți această variabilă privată și să creați variabile speciale de clasă publică pentru a seta valorile numelui de utilizator, dacă este necesar.

Utilizarea Metodelor

Pentru a apela o metodă pe un obiect, utilizați operatorul ->, cu care v-ați familiarizat deja.

$object->methodName()

Acest lucru funcționează la fel ca apelarea unei funcții obișnuite. Puteți trece argumente în paranteze (presupunând, desigur, că sunt necesare unele argumente), apelul la metodă poate returna și anumite valori, pe care apoi îl puteți folosi.

loggedIn = adevărat; ) funcția publică logout() ( $this->loggedIn = false; ) public function isLoggedIn() ( return $this->loggedIn; ) ) $member = new Member(); $member->username = "Fred"; echo $member->nume utilizator . "este". ($membru->
"; $member->login(); echo $member->nume utilizator . " este " . ($member->isLoggedIn() ? "conectat": "deconectat") ."
"; $member->logout(); echo $member->nume utilizator . " este " . ($member->isLoggedIn() ? "conectat": "deconectat") ."
"; ?>

Acest script va afișa următoarele:

Fred este deconectat Fred este conectat Fred este deconectat

Iată cum funcționează:

  1. După ce am descris clasa Member, am creat obiectul acesteia și l-am stocat în variabila $member. De asemenea, am dat variabilei de clasă $username a acestui obiect valoarea „Fred”.
  2. Apoi am apelat metoda $member->isLoggedIn() pentru a determina dacă utilizatorul este conectat sau nu. Această metodă returnează pur și simplu valoarea variabilei clasei $loggedIn. Deoarece valoarea implicită a acestei variabile de clasă este falsă, rezultatul apelării $member->isLoggedIn() va fi fals, așa că va fi afișat mesajul „Fred este deconectat”.
  3. Apoi numim metoda login(). Acesta va seta variabila de clasă $loggedIn la adevărat.
  4. Acum, când apelați metoda $member->isLoggedIn(), va returna true și va afișa mesajul „Fred este conectat”.
  5. Să apelăm metoda logout(), care setează valoarea proprietății $loggedIn la false.
  6. Să apelăm metoda $member->isLoggedIn() a treia oară. Acum va returna false deoarece proprietatea $loggedIn este setată din nou la false. Deci, mesajul „Fred este deconectat” va fi afișat din nou.

Notă: în cazul în care ați văzut asta mai întâi: ?: este un operator ternar. Aceasta este o versiune simplificată a blocurilor if...else. Puteți afla despre aceste tipuri de operatori.

concluzii

În acest tutorial ați învățat elementele de bază ale OOP în PHP. Ați învățat despre lucruri precum:

  • Ce este OOP și de ce este util?
  • concepte de clase, obiecte, variabile de clasă și metode
  • cum se creează clase și obiecte
  • cum să creați și să utilizați variabile de clasă
  • concepte de identificatori de acces public, privat, protejat
  • cum să creați și să utilizați metodele de clasă

Ați învățat deja multe despre el și veți învăța multe mai multe în lecțiile următoare. Cu toate acestea, dacă ați analizat toate exemplele pe care le-am dat, aveți o bază solidă. Puteți începe să creați aplicații folosind OOP.