Wordpress Plugins - все качества на даден обект в асоциативен масив в PHP
По време на строителство, може да се наложи да се промени формата на данните по някаква причина. Работа с обекти не винаги да е удобно.
В PHP обект може да бъде превърнато в масив, така че свойствата на обекта ще станат индекси асоциативен масив. Намерени 2 начина да направите това (за да не се повдигне след кодовите фрагменти, print_r на резултати () ще бъдат пропуснати, навсякъде, които са заинтересовани да се пробвате):
- Можете просто да се промени типа на променлива, която съдържа един обект:
$ А = нов А (); // Създаване на обект A
$ А = (масив) долара; // го превърне до стабилно
Но по някаква причина и имаше несигурност с него. В един прост пример, който скицирани за проверка на функцията на защитените характеристики (защитен), връща масив от само общите свойства на обекта:
клас B защитена $ име = «Алекс»;
>
клас А се простира В обществения $ NAME2 = «Alex2»;
>
$ А = нов А ();
$ А = get_object_vars ($ а);
print_r ($ а);
Но когато се опитате да използвате действителният код на проекта, което е приблизително една и съща структура на кода, както в обикновен примера по-горе, функцията връща при мен и защитена, както и частни имоти, които се съдържат в родителския клас. По принцип имам рейк ...
След някои експерименти установили, че функцията връща само обществени или защитени (обществени) свойства на обекта в зависимост от контекста, извикването на функция (между другото се отнася и за метода 3, получаване на свойствата на обекта в масив чрез цикъл). Аз не знам това е бъг или тя е била предназначена, но тя работи по следния начин:
функционални publci_get_vars ($ OBJ) връщане get_object_vars ($ OBJ);
>
клас B защитена $ nameProtected = «AlexProtected»;
частен $ namePrivate = «AlexPrivate»;
обществен $ миналата = «NikolaevPublic»;
>
клас А се простира В обществения $ namePublic = «AlexPublic»;
частен $ lastPrivate = «NikolaevPrivate»;
защитени $ lastprotected = «Nikolaevprotected»;
функционални get_vars () $ всички = get_object_vars ($ това); // vrent всички
$ Public = publci_get_vars ($ това); // връща само публично
върне масив ($ всичко, $ публичен);
>
>
$ Obj = нов А ();
$ Array = get_object_vars ($ OBJ); // връща само публично
$ Резултат = $ obj-> get_vars ();
$ Vars = масив ();
foreach ($ OBJ като $ име => $ стойност) $ Vars [име $] = $ стойност;
>
И ако, както е в 2 начина, предизвика цикъл директно в тялото на метод обект, който ние preobrazum, цикълът ще се проведе и защитени свойства на обекти (защитени и частни), а не само на обществените свойства на обекта (обществени).
Използвайте превръщането на обекта в масива е много внимателно и това, което изглежда на пръв поглед прост, разбираем и очевидно може да бъде по-малко очевидно, наистина. Може би има и други начини за получаване на свойства на обекта в асоциативен масив в PHP, но мислех, че от тях не знам. Познаването на тези малки нюанси, аз не мисля, че ще бъде трудно да се получи само публична или само охранявания обект свойства.