Wordpress Plugins - все качества на даден обект в асоциативен масив в PHP

По време на строителство, може да се наложи да се промени формата на данните по някаква причина. Работа с обекти не винаги да е удобно.

В PHP обект може да бъде превърнато в масив, така че свойствата на обекта ще станат индекси асоциативен масив. Намерени 2 начина да направите това (за да не се повдигне след кодовите фрагменти, print_r на резултати () ще бъдат пропуснати, навсякъде, които са заинтересовани да се пробвате):

  1. Можете просто да се промени типа на променлива, която съдържа един обект:

$ А = нов А (); // Създаване на обект A
$ А = (масив) долара; // го превърне до стабилно

има едно нещо в този подход. Аз лично съм имал проблеми със защитени и стаи в частни свойства на обекта, индексите не се виждат, въпреки че мрежата е намерил примери, в които е видно, че на защитените обекти, свойства попадат в масива, само името на индекса се вземат предвид не само името на имота, както и заместени префикс, в зависимост свойства на защитена или частен. Имам дебъгер индекси не се показват на всички. Ако се опитате да донесе целия print_r ($ а), се показват индексите във формата на символа.
  • Вторият начин за преобразуване на обект в масива - функционални get_object_vars ().

    Но по някаква причина и имаше несигурност с него. В един прост пример, който скицирани за проверка на функцията на защитените характеристики (защитен), връща масив от само общите свойства на обекта:

    клас 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 ();

    Друго би било да се опитаме да се държим така, ако функцията на обекта в предаването call_user_func () функция или call_user_func_array () като параметър. И какво, ако нарича чрез (метод __call), който е в различен клас?
  • Третият метод за получаване на асоциативен масив от обекти свойства (или автоматично увеличение) е да се приложат просто foreach линия:

    $ Vars = масив ();
    foreach ($ OBJ като $ име => $ стойност) $ Vars [име $] = $ стойност;
    >

    И ако, както е в 2 начина, предизвика цикъл директно в тялото на метод обект, който ние preobrazum, цикълът ще се проведе и защитени свойства на обекти (защитени и частни), а не само на обществените свойства на обекта (обществени).

  • Използвайте превръщането на обекта в масива е много внимателно и това, което изглежда на пръв поглед прост, разбираем и очевидно може да бъде по-малко очевидно, наистина. Може би има и други начини за получаване на свойства на обекта в асоциативен масив в PHP, но мислех, че от тях не знам. Познаването на тези малки нюанси, аз не мисля, че ще бъде трудно да се получи само публична или само охранявания обект свойства.

    Прочетете също така: