Plugin-uri Wordpress - obtinerea de proprietăți ale unui obiect într-un tablou asociativ în PHP
În timpul dezvoltării, poate fi necesar pentru a schimba formatul datelor din orice motiv. Lucrul cu obiecte nu pot fi întotdeauna convenabil.
In php obiect poate fi convertit într-o matrice, astfel încât proprietățile obiectului va deveni un indici de matrice asociative. Am găsit 2 moduri de a face acest lucru (pentru a nu se amestecă până fragmentele de cod POST, print_r rezultate () vor fi omise peste tot care sunt interesați pot încerca tine):
- Puteți schimba pur și simplu tipul unei variabile, care conține un obiect:
$ A = nou A (); // Crearea unui obiect A
$ A = (array) $ a; // conversia într-un solid
Dar, pentru un motiv oarecare și a existat o incertitudine cu ea. Într-un exemplu simplu, pe care am desenat pentru testarea funcției caracteristicilor protejate (protejate), funcția returnează o matrice de numai proprietățile publice ale obiectului:
clasa B protejată numele $ = «Alex»;
>
clasa A se extinde publica B $ nume2 = «alex2»;
>
$ A = nou A ();
$ A = get_object_vars ($ a);
print_r ($ a);
Dar atunci când încercați să utilizați codul actual al proiectului, care este aproximativ aceeași structură a codului, la fel ca în exemplul simplu de mai sus, funcția se întoarce la mine și protejate, și proprietăți private, care sunt cuprinse în clasa părinte. În general, am o grebla ...
După unele experimente a constatat că funcția returnează numai proprietăți publice sau protejate (publice) ale obiectului în funcție de context, apelul la funcție (de modul se aplică și pentru metoda 3, obținerea de proprietățile obiectului, într-o matrice printr-un ciclu). Nu știu acest lucru este o eroare sau a fost destinat, dar funcționează în felul următor:
publci_get_vars funcția ($ obj) get_object_vars întoarcere ($ obj);
>
clasă B protejată $ nameProtected = «AlexProtected»;
privat $ namePrivate = «AlexPrivate»;
$ Publică ultima = «NikolaevPublic»;
>
clasa A se extinde publica B $ namePublic = «AlexPublic»;
privat $ lastPrivate = «NikolaevPrivate»;
protejat $ lastprotected = «Nikolaevprotected»;
get_vars function () $ = toate get_object_vars ($ acest); // vrent toate
$ Public = publci_get_vars ($ acest lucru); // întoarce publice numai
întoarce array ($ toate, $ publică);
>
>
$ Ob = new A ();
$ Array = get_object_vars ($ obj); // întoarce publice numai
Rezultat $ = $ obj-> get_vars ();
$ Vars = array ();
foreach ($ obj ca $ name => $ valoare) $ vars [$ name] value = $;
>
Și dacă, la fel ca în 2 moduri, duce la un ciclu direct în corpul unei metode obiect pe care le preobrazum, ciclul va avea loc și protejate proprietățile obiectelor (protejate și private), și nu doar pe proprietățile publice ale obiectului (public).
Utilizați transformarea obiectului în matrice este foarte atent și ceea ce pare la prima vedere o simplă, ușor de înțeles și evident poate fi mai puțin evidente într-adevăr. Poate că există și alte modalități de a obține proprietățile obiectului într-un tablou asociativ în php, dar m-am gândit dintre ei nu știu. Cunoscând aceste nuanțe mici, nu cred că va fi dificil să se obțină numai numai proprietățile obiectului public sau protejate.