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):

  1. 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

există un lucru în această abordare. Eu personal am avut probleme cu proprietăți ale obiectului protejate și Privat, indicii nu sunt văzute, deși rețeaua a găsit exemple în care se demonstrează că proprietățile obiectului protejate se încadrează în matrice, doar numele index este luat nu numai numele de proprietate, și prefix substituit, în funcție proprietățile protejate sau privat. Am un depanator indici nu sunt afișate deloc. Dacă încercați să aducă peste print_r (a $), sunt afișate indici în formă de caractere.
  • A doua modalitate de a converti un obiect în matrice - get_object_vars funcție ().

    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 ();

    O alta ar fi să încerce să se comporte ca și în cazul în care funcția obiectului în call_user_func de transmisie () funcție sau call_user_func_array () ca parametru. Și dacă numit prin metoda __call (), care este într-o clasă diferită?
  • Al treilea proces de preparare a unui tablou asociativ a proprietăților obiectelor (sau auto-increment) este de a pune în aplicare o buclă simplă foreach:

    $ 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.

    Citește și: