Z nową tablicą robię to:
$aVal = array();
$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";
Czy istnieje podobna składnia dla obiektu
(object)$oVal = "";
$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";
$var = (object) (boolean) (string) (int) (array) new StdClass;
Wiesz, żeby być bezpiecznym.Arrays - How to define an empty object in PHP
. Nie ma nic wspólnego z tablicamiOdpowiedzi:
Komentarz w podręczniku podsumowuje to najlepiej:
źródło
stdClass
w mojej głowie jako „klasę standardową”new \stdClass();
PHP Namespace DocstdClass()
to słowoAIDS
?Standardowym sposobem utworzenia „pustego” obiektu jest:
Ale przy PHP> = 5.4 osobiście wolę używać:
Jest krótszy i osobiście uważam, że jest bardziej przejrzysty, ponieważ stdClass może wprowadzać w błąd początkujących programistów (tj. „Hej, chcę obiekt, a nie klasę!” ...).
To samo z PHP <5.4 to:
(object)[]
jest równoważne znew stdClass()
.Zobacz instrukcję PHP ( tutaj ):
i ( tutaj ):
Pamiętaj jednak, że puste ($ oVal) zwraca false , ponieważ @PaulP powiedział:
Jeśli chodzi o twój przykład, jeśli piszesz:
PHP tworzy następujące Ostrzeżenie, domyślnie tworząc właściwość
key1
(sam obiekt)Może to stanowić problem, jeśli Twoja konfiguracja (patrz poziom zgłaszania błędów ) wyświetla to ostrzeżenie w przeglądarce. To kolejny cały temat, ale szybkim i nieprzyzwoitym podejściem może być użycie operatora kontroli błędów (@) w celu zignorowania ostrzeżenia:
źródło
stdClass
robi.stdClass
robi. UżyłemstdClass
kodu, który odpowiada na pytanie. Przepraszam, ale nie tworzę nowego problemu, taka była moja osobista opinia (jak napisałem).(object) []
Chcę podkreślić, że w PHP nie ma czegoś takiego jak pusty obiekt w sensie:
ale oczywiście $ obj będzie pusty.
Z drugiej strony pusta tablica oznacza pustą w obu przypadkach
Cytat z funkcji dziennika zmian pusty
źródło
php.net powiedział, że najlepiej:
źródło
Uwielbiam, jak łatwo jest tworzyć obiekty anonimowego typu w JavaScript:
Dlatego zawsze staram się pisać tego rodzaju obiekty w PHP, tak jak robi to javascript :
Ale ponieważ jest to w zasadzie tablica, nie można wykonywać takich czynności, jak przypisywanie anonimowych funkcji do właściwości, takich jak js:
Cóż, możesz to zrobić, ale IMO nie jest praktyczne / czyste:
Ponadto, korzystając z tej składni, możesz znaleźć zabawne niespodzianki , ale działa dobrze w większości przypadków.
źródło
Oprócz odpowiedzi zombata, jeśli ciągle zapominacie
stdClass
Teraz możesz zrobić:
źródło
Możesz użyć
new stdClass()
(co jest zalecane):Lub możesz przekonwertować pustą tablicę na obiekt, który tworzy nową pustą instancję wbudowanej klasy stdClass:
Lub możesz przekonwertować
null
wartość na obiekt, który tworzy nową pustą instancję wbudowanej klasy stdClass:źródło
aby uzyskać dostęp do danych w stdClass w podobny sposób, jak w tablicy asocjacyjnej, wystarczy użyć składni {$ var}.
źródło
Jak zauważyli inni, możesz użyć stdClass. Jednak myślę, że jest czystszy bez (), tak:
Jednak na podstawie tego pytania wydaje się, że naprawdę chcesz dodawać właściwości do obiektu w locie. Nie musisz do tego używać stdClass, chociaż możesz. Naprawdę możesz użyć dowolnej klasy. Wystarczy utworzyć instancję obiektu dowolnej klasy i rozpocząć ustawianie właściwości. Lubię tworzyć własną klasę, której nazwa to po prostu podstawowa rozbudowana funkcjonalność, którą lubię w takich przypadkach i jest miła do rozszerzenia z innych klas. Zasadniczo jest to moja własna podstawowa klasa obiektów. Lubię też mieć funkcję o nazwie o (). Tak jak:
Jeśli nie chcesz mieć własnego podstawowego typu obiektu, możesz po prostu poprosić o () o zwrócenie nowej klasy stdClass. Jedną z zalet jest to, że o jest łatwiejsze do zapamiętania niż stdClass i jest krótszy, niezależnie od tego, czy użyjesz go jako nazwy klasy, nazwy funkcji, czy obu. Nawet jeśli nie masz żadnego kodu w swojej klasie, łatwiej jest zapamiętać niż niezgrabnie pisane wielką literą i nazwane stdClass (co może wywoływać ideę „klasy chorób przenoszonych drogą płciową”). Jeśli dostosujesz klasę o, możesz znaleźć zastosowanie dla funkcji o () zamiast składni konstruktora. Jest to normalna funkcja, która zwraca wartość, która jest mniej ograniczona niż konstruktor. Na przykład nazwę funkcji można przekazać jako ciąg do funkcji, która akceptuje parametr na żądanie. Funkcja obsługuje również tworzenie łańcuchów. Możesz więc zrobić coś takiego:
To świetny początek dla podstawowego „języka”, na którym można budować inne warstwy językowe, przy czym górna warstwa jest zapisywana w pełni wewnętrznych DSL. Jest to podobne do stylu seplenienia, a PHP obsługuje go znacznie lepiej niż większość ludzi zdaje sobie sprawę. Zdaję sobie sprawę, że jest to trochę styczna do pytania, ale pytanie dotyczy tego, co moim zdaniem jest podstawą do pełnego wykorzystania mocy PHP.
źródło
Jeśli chcesz utworzyć obiekt (jak w javascript) z właściwościami dynamicznymi, bez ostrzeżenia o niezdefiniowanej właściwości.
źródło
Możesz także spróbować w ten sposób.
Wynik:
źródło
Użyj ogólnego obiektu i odwzoruj na nim pary wartości klucza.
Lub rzuć tablicę na obiekt
źródło
Jeśli nie chcesz tego robić:
Możesz użyć jednej z następujących opcji:
PHP> = 5,4
PHP <5.4
źródło
Oto przykład z iteracją:
źródło
Masz tę kiepską, ale przydatną technikę:
źródło
stdClass jest domyślnym obiektem PHP. stdClass nie ma właściwości, metod ani elementu nadrzędnego. Nie obsługuje magicznych metod i nie implementuje interfejsów.
Kiedy rzutujesz skalar lub tablicę jako Object, dostajesz instancję stdClass. Możesz użyć stdClass, ilekroć potrzebujesz ogólnej instancji obiektu.
stdClass NIE jest klasą podstawową! Klasy PHP nie dziedziczą automatycznie po żadnej klasie. Wszystkie klasy są samodzielne, chyba że jawnie rozszerzają inną klasę. Pod tym względem PHP różni się od wielu języków obiektowych.
W kodzie nie można zdefiniować klasy o nazwie „stdClass”. Ta nazwa jest już używana przez system. Możesz zdefiniować klasę o nazwie „Obiekt”.
Możesz zdefiniować klasę rozszerzającą stdClass, ale nie uzyskałbyś żadnej korzyści, ponieważ stdClass nic nie robi.
(testowany na PHP 5.2.8)
źródło