Mai mult
Care este cea mai bună metodă de a îmbina două obiecte PHP?
Avem două PHP5 obiecte și-ar dori să fuzioneze conținutul de unul în cel de-al doilea. Nu există noțiunea de subclase între ele astfel încât soluțiile descrise în următoarele subiect nu se poate aplica.
Cum ai copia un PHP obiect într-un alt tip de obiect
//We have this:
$objectA->a;
$objectA->b;
$objectB->c;
$objectB->d;
//We want the easiest way to get:
$objectC->a;
$objectC->b;
$objectC->c;
$objectC->d;
Observații:
- Acestea sunt obiecte, nu pe clase.
- Obiectele conține destul de o mulțime de domenii, deci un foreach ar fi destul de lent.
- Până în prezent avem în vedere transformarea obiecte a și B în matrice, apoi fuzionează le folosesc array_merge() înainte de a re-transformarea într-un obiect, dar putem't spune că suntem mândri daca acest lucru.
214
13
Acest fapt, de asemenea, funcționează atunci când obiectele au metode. (testat cu PHP 5.3 și 5.6)
Dacă obiectele conține doar câmpuri (metode), acest lucru funcționează:
Ai putea crea un alt obiect care expedieri apeluri la magie metode de bază de obiecte. Aici's cum te-ai'd ocup `__a obține, dar să-l de lucru pe deplin te'd trebuie să suprascrie toate relevante magic metode. Te'll găsi, probabil, erori de sintaxă când am intrat doar de pe partea de sus a capul meu.
Noroc.
Am înțeles că, folosind generic de obiecte [stdClass()] și turnare-le ca matrice răspunde la întrebare, dar m-am gândit Compozitorul a fost un răspuns bun. Totuși, am simțit că ar putea utiliza unele îmbunătățiri și ar putea fi util pentru altcineva.
Caracteristici:
Cod:
Utilizare:
Exemplu:
O soluție foarte simplă, având în vedere că au de obiect a și B:
Ca's toate. Acum aveți objA cu toate valorile din objB.
o soluție Pentru a păstra,ambele metode și proprietăți din fuzionat onjects este de a crea un combinator clasă, care pot
utilizare simplă
Pentru a fuziona orice număr de prime obiecte
Anii
\ArrayObject clasa are posibilitatea de a _exchange_ matrice curent pentru a deconecta original _reference_. Pentru a face acest lucru, acesta vine cu două îndemână metode:
exchangeArray () " și " getArrayCopy(). Restul este simplu
array_merge()a oferit obiect cu
ArrayObject publice proprietăți:Utilizarea este la fel de ușor ca asta:
Mi-ar merge cu legarea cel de-al doilea obiect într-o proprietate de primul obiect. Dacă cel de-al doilea obiect este rezultatul de o funcție sau metodă, utilizați referințe. Ex:
Las's păstrați-l simplu!
Dacă asta nu't răspunde la întrebarea dumneavoastră, aceasta va ajuta cu siguranță spre răspunsul. Credit pentru codul de mai sus merge la mine :)
Aici este o funcție care va aplatiza un obiect sau un array. Utilizați acest lucru numai dacă sunteți sigur că cheile sunt unice. Dacă aveți cheile cu același nume vor fi suprascrise. Veți avea nevoie pentru a plasa acest lucru într-o clasă și înlocuiți "Funcții" cu numele clasei. Bucurați-vă de...
Acest fragment de cod va recursiv converti datele la un singur tip (array sau object) fără imbricate foreach bucle. Sper sa ajute pe cineva!
Odată ce un Obiect este în format matrice puteți utiliza array_merge și de a converti înapoi la Obiect, dacă aveți nevoie să.
Procedurale mod
Toate de credit merge la: Jason Oakley