php încărcare automată orientată pe obiecte de clase, serializarea și informații

Dacă ați trecut de toate cele trei lecția precedentă, atunci sunteți deja familiarizați cu conceptele de bază ale OOP în PHP: clase, obiecte, metode, câmpuri și moștenirea. In aceasta, ultima lecție voi încerca să termin subiectul programării orientate pe obiecte în PHP, precum și să vă prezint unele proprietăți PHP extrem de utile asociate cu OEP:

  • Cum se încarcă în mod automat clase;
  • Cum de a converti obiecte într-un șir de caractere și un șir de caractere în obiecte pentru depozitarea și transferul ușor;
  • Cum de a obține informații detaliate cu privire la o clasă sau un obiect specific.

încărcare automată clasa

php încărcare automată orientată pe obiecte de clase, serializarea și informații

De regulă, este util să se păstreze în fiecare clasă de PHP într-un fișier separat. De exemplu, într-o aplicație pe forum web, v-ar fi păstrat Member.php membru fișier de clasă și clasa subiect - în fișierul Topic.php. Cel mai probabil, vă va stoca toate fișierele din clasele de foldere undeva pe site-ul:

Apoi, în cazul în care aveți nevoie pentru a crea un obiect de clasă, de exemplu, membru, PHP va trebui să se conecteze primul fișier cu această clasă:

clase de depozitare în așa fel - un lucru bun, nu numai pentru psihicul tau, dar, de asemenea, pentru utilizarea unor astfel de caracteristici convenabile ca încărcare automată (autoloading).

încărcare automată funcționează. Undeva la începutul aplicației PHP creați o __autoload funcție specială (). Mai târziu, dacă undeva în codul va încerca să creeze un obiect de clasă, din care nu se știe nimic, PHP va apela în mod automat această funcție, trecându-l ca parametru numele clasei dorite. Toate funcția de lucru este de a găsi fișierul dorit și încărcați-l la script, astfel, pentru a încărca clasa în sine. După aceea PHP va trebui să creeze un obiect al acestei clase.

Să dau un exemplu. Scrie un __autoload funcție () pentru a încărca în mod automat clase din dosarul clase:

Iată cum funcționează. În primul rând, creați) funcția __autoload (cu parametrul de intrare $ classname. La început, funcția elimină oricare din subșirul „..“ din parametrul primit, acest lucru se face în scopuri de securitate. Apoi, folosind require_once (), se încarcă fișierul dorit. Funcția știe că este în dosarul clase, iar extensia sa - .php. Funcția afișează, de asemenea, un mesaj pe pagina, asa ca am vedea imediat că acesta a lucrat.

Protestatarii atunci funcția noastră prin crearea unui obiect de membru de clasă. Din moment ce nu sunt pre-încărcați clasa cu fișierul, PHP va lansa __autoload funcția (), trecându-l numele clasei - „membru“. Ea, la rândul său, va căuta clase / fișier Member.php. PHP creează apoi același membru de obiect. În final, este afișat un mesaj care este creat obiectul.

Pentru a testa funcționarea acestui scenariu, creați dosarul clase în același director ca și script-ul. Să ne creați-l Member.php fișier cu o clasă simplă:

Acum, când vom rula script-ul pentru a încărca clase / fișier Member.php va crea un obiect de membru al clasei, iar ecranul va afișa următoarele:

descărcare automată va ajuta să salva o mulțime de timp, mai ales dacă aveți un număr foarte mare de clase. În loc de asteptare require_once funcția () la începutul fiecărui fișier pe care tocmai l-ați creat la începutul tuturor __autoload funcția aplicații (), și să dea cursuri de management încărcate în mâinile PHP!

serializarea obiect

php încărcare automată orientată pe obiecte de clase, serializarea și informații

caracteristică OOP În continuare, pe care am să-ți spun - aceasta este conversia unui obiect într-un șir de caractere, și vice-versa, într-un obiect string. Acest lucru poate fi util atunci când aveți nevoie pentru a trece de obiecte între script-uri, și chiar aplicații. Aici sunt cazuri specifice:

Pentru a converti obiectul într-un șir de caractere, și înapoi, de următoarele caracteristici:

  • serialize () - are un obiect și returnează o reprezentare șir de clasă și proprietățile sale;
  • unserialize () - Ia un șir de caractere creat folosind serialize (), și returnează obiectul.

Să ne uităm la aceste două funcții în:

Am creat un simplu membru de clasă cu numele de utilizator domeniului public $, domeniul privat $ loggedin și trei metode publice: conectare (), logout () și isLoggedIn (). Apoi, script-ul creează un membru obiect de clasă, dându-i numele de „Fred“, și-l va autentificati.

Apoi apelați funcția serialize (), trecându-l obiectul unui membru de clasă. serialize () returnează o reprezentare șir de caractere a obiectului pe care am stocat în $ memberString variabilă și afișarea pe pagină:

Apoi, conversia înapoi la membru nostru obiect de clasă șir, provocând unserialize funcția (), și se păstrează obiectul obținut la $ member2 variabila. Pentru a verifica dacă facilitatea noastră de a converti în mod corect și complet, vom afișa valoarea câmpului său de $ nume de utilizator și a apela metodele sale isLoggedIn (), pentru a verifica dacă utilizatorul este conectat. Iată ce va apărea pe pagina:

După cum puteți vedea, șirul creat de serialize () funcția conține numele clasei, precum și numele tuturor domeniilor sale și valorile lor pentru un anumit obiect. (Înainte de câmpuri nume de clasă privat este scris fără spații.) Cu toate acestea, numele metodelor de clasă nu sunt scrise în linie.

Pentru a se angaja funcția unserialize () a clasei de obiecte, care urmează să fie transformat dintr-un șir de caractere care trebuie să fie încărcat înainte de modul în care apelul unserialize (). Puteți scrie propria clasă în același script, care se numește unserialize a PHP (), sau pentru a încărca un fișier cu o clasă dată printr-o funcție require_once (). Puteți crea, de asemenea, funcția __autoload (), pe care am discutat mai devreme. PHP va provoca __autoload (), în cazul în care nu se poate găsi obiectul de clasă pe care încercați să convertiți.

Notă: serialize () și unserialize (), de asemenea cu alte tipuri de date, cum ar fi matrici. Cu toate acestea, ei nu lucrează cu resursa.

__sleep () și __wakeup ()

Uneori, înainte de serializarea obiectului, este nevoie de ceva pentru a curăța. De exemplu, poate fi necesar pentru a înregistra un obiect în baza de date și a închide conexiunea. În mod similar, după deserializarea, poate doriți să restabiliți conexiunea și de a efectua alte acțiuni.

PHP are câteva tehnici speciale pe care le va ajuta în acest sens:

  • __sleep () se numește strict înainte ca obiectul este serializat folosind funcția serialize ().
  • __wakeup () se numește imediat după obiectul este deserialized prin unserialize ().

__sleep dvs. Funcția () va trebui să se întoarcă o listă de câmpuri de clasă. Asta e câmpurile care funcția serializam () este inclusă în șirul returnat. Puteți utiliza acest pentru a elimina câmpuri inutile de la o reprezentare șir de caractere a obiectului.

Să adăugăm la exemplul nostru anterior metode __sleep () și __wakeup ():

Iată ce va apărea pe pagina:

Vă rugăm să rețineți că:

  • Metodele noastre nu curăță de fapt nimic __sleep () și __wakeup (), și nu cere; în schimb, ei pur și simplu emite mesajul „Curățarea obiectului.“ și „Configurarea obiectului.“.
  • Din moment ce includem numai câmpul $ numele de utilizator pentru matrice, care se întoarce __sleep (), în șirul rezultat nu va fi prezent caseta $ loggedin.
  • Ca urmare, obiectul deserialized câmp $ loggedin va implicit - fals, deci isLoggedIn metoda de apel () a obiectului deserialized, returnează false. De aceea, script-ul afișează un mesaj de „Fred este deconectat“.

Dacă doriți să scrie __sleep metoda (), și toate câmpurile au fost serializat, atunci va trebui să lista toate câmpurile la o matrice care returnează __sleep metoda (). Acest lucru este ușor de realizat folosind array_keys PHP () și get_object_vars (), după cum urmează:

Notă: altă metodă obiect de clasă serializare (în care, cross-platform) - este JSON linii de conversie.

Obținerea de informații despre clase și obiecte

php încărcare automată orientată pe obiecte de clase, serializarea și informații

PHP are o mulțime de funcții utile pentru a obține informații despre clase și obiecte. Acest lucru este util atunci când doriți să lucrați cu obiecte din alte aplicații, și va ajuta, de asemenea, să scrie un cod ușor de utilizat, flexibil. Folosind aceste funcții pentru un obiect, puteți obține numele său de clasă, verificați dacă acesta este creat dintr-o anumită clasă, pentru a primi câmpurile și metodele sale, și altele.

Iată o scurtă listă a celor mai frecvent utilizate:

Se returnează un tablou asociativ din toate domeniile de $ obj, împreună cu valorile lor curente

Foarte important, cum ar fi funcții get_class_methods (), get_class_vars () și get_object_vars (), returnează numai acele metode și domenii care sunt în același domeniu de aplicare cu codul apelantului. De exemplu, metoda privat va fi inclusă în get_class_methods valoarea returnată () funcție numai dacă get_class_methods () metoda este invocată într-o clasă.

Să experimenteze cu unele dintre aceste funcții în acest eșantion:

Script-ul creează o clasă cu mai multe domenii membre și metode. Se creează, de asemenea, un administrator de clasă - copil de membru al clasei. Clasa este adăugată la administratorul domeniului public $ adminLevel, precum și o serie de metode: createForum () și banMember (), care va avea doar clasa administrator de obiecte.

Dupa crearea unei clase, vom crea un obiect de administrator de clasă, stocați-l în $ admin variabilă, dându-i numele de „Maria“ și parola administratorului folosind datele de conectare metoda de apel ().

În ultima parte a script-ul (liniile 44-54), vom folosi o varietate de funcții pentru facilități și clasele noastre. Aici este rezultatul acestui cod:

Iată cum să lucreze aceste funcții:

  1. get_class ($ admin) returnează șirul "Administrator".
  2. get_parent_class ($ admin) returnează șirul de "membru".
  3. is_a ($ admin, "membru") returnează true.
  4. get_class_methods ($ admin) returnează o matrice de nume de metode pentru clase și administrator membru. Din moment ce toate aceste metode - publice, acestea vor fi scrise matrice.
  5. get_class_vars ($ admin) returnează o matrice de nume de câmpuri și valorile lor implicite publice corespunzătoare pentru administrator și membru clase.
  6. get_object_vars ($ admin) returnează o serie de nume de domenii publice și valorile lor curente respective.
  7. La sfârșitul metodei de apel clasa membru - listMyProperties (). Această metodă solicită get_object_vars () și afișează rezultatul. Cu toate acestea, din moment ce get_object_vars () este acum numit din interiorul clasei, revine, de asemenea, domeniul privat - $ loggedin.

După cum puteți vedea, PHP este foarte ușor pentru a extrage orice informație despre un obiect sau o clasă. În PHP există o funcție pentru obținerea de informații despre clasele de obiecte și interfețe, de exemplu, class_exists (), get_called_class (), get_declared_classes (), get_declared_interfaces (), interface_exists (), is_subclass_of (), method_exists () și property_exists ().

În această lecție, ai învățat despre proprietățile benefice ale celor trei obiecte PHP:

  1. Utilizarea __autoload () pentru a descărca în mod automat fișierele în clasele necesare;
  2. Cum se convertesc obiecte într-un rând și înapoi folosind PHP serialize () și unserialize ();
  3. Obținerea de informații despre obiecte, clase, strămoșii folosind funcțiile PHP.

Cu aceste trei proprietăți pentru a lucra cu clase și obiecte în PHP nu va fi o lucrare uriașă.

Sper că va plăcut această serie de lecții dedicate OEP în PHP! Dacă ați terminat toate cele patru lecții, aveți suficiente cunoștințe pentru a scrie site-uri de clasă PHP și aplicații. Cu toate acestea, povestea nu se termina aici - în PHP are o multime de caracteristici utile concepute pentru a lucra cu OEP, de exemplu:

Dacă am timp, și, dacă aveți o astfel de nevoie, vă voi spune despre ele în următoarele lecții.

php încărcare automată orientată pe obiecte de clase, serializarea și informații

Prin obținerea de informații de la două canale (vedere si auz) eficacitatea instruirii de învățare departe superioare de cărți. O temele pentru acasă și teste on-line vă va permite să se gândească în mod constant în limba țintă și imediat verifica cunoștințele!

php încărcare automată orientată pe obiecte de clase, serializarea și informații

php încărcare automată orientată pe obiecte de clase, serializarea și informații

Dacă doriți o lungă perioadă de timp pentru a studia modul în HTML, mi-ai, pentru ai vesti bune!

php încărcare automată orientată pe obiecte de clase, serializarea și informații

Dacă ați învățat deja HTML și doresc să avanseze, următorul pas va fi de a studia tehnologia CSS.

php încărcare automată orientată pe obiecte de clase, serializarea și informații

Dacă doriți să înțeleagă conceptele de domeniu si hosting, învață cum să creeze o bază de date, încărca fișiere pe un site web prin intermediul unui server FTP, crea subdomenii, configurați cutiile poștale pentru site-ul și să monitorizeze participarea, acest curs este conceput special pentru tine!