Rozumiem, że PHP nie ma czystej zmiennej obiektu, ale chcę sprawdzić, czy właściwość znajduje się w danym obiekcie lub klasie.
$ob = (object) array('a' => 1, 'b' => 12);
lub
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
W JS mogę napisać to, aby sprawdzić, czy zmienna a
istnieje w obiekcie:
if ('a' in ob)
Czy w PHP można zrobić coś takiego?
Bardzo dziękuję za twoją poradę.
Odpowiedzi:
property_exists (mieszana klasa $, ciąg $ właściwość)
isset (mieszane $ var [, mieszane $ ...])
Przykład 1:
Przykład 2:
źródło
empty()
jest lepsze rozwiązanie?!empty($var)
?Aby sprawdzić, czy właściwość istnieje i czy też jest pusta, możesz użyć funkcji
property_exists()
.Dokumenty: http://php.net/manual/en/function.property-exists.php
W przeciwieństwie do isset (), property_exists () zwraca TRUE, nawet jeśli właściwość ma wartość NULL.
Przykład:
źródło
Ani isset, ani property_exists nie działają dla mnie.
Skończyło się na:
Przykład:
źródło
Rozwiązanie
echo $person->middleName ?? 'Person does not have a middle name';
Aby pokazać, jak to wyglądałoby w oświadczeniu if, aby uzyskać większą jasność, jak to działa.
Wyjaśnienie
Tradycyjny sposób PHP na sprawdzenie, czy coś istnieje, to:
LUB w sposób bardziej specyficzny dla klasy:
Oba są dobre w długich oświadczeniach, ale w potrójnych oświadczeniach stają się niepotrzebnie uciążliwe, jak na przykład:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Możesz to również osiągnąć za pomocą tylko operatora trójskładnikowego, takiego jak ten:
echo $person->middleName ?: 'Person does not have a middle name';
Ale ... jeśli wartość nie istnieje (nie jest ustawiona), podniesie wartość
E_NOTICE
i nie jest najlepszą praktyką. Jeśli wartość jest równanull
, nie zgłosi wyjątku.Dlatego trójskładnikowy operator na ratunek czyni tę zgrabną małą odpowiedź:
echo $person->middleName ?? 'Person does not have a middle name';
źródło
Jeśli chcesz wiedzieć, czy właściwość istnieje w instancji klasy, którą zdefiniowałeś, po prostu połącz ją
property_exists()
zisset()
.źródło
property_exists($this, $property)
jest tutaj trochę zbędne, ponieważ twój kod zawsze będzie miał taki sam wynik jakisset($this->$property)
sam.isset()
nie można stwierdzić, czy właściwość jest prawdziwym członkiem definicji klasy. Później spojrzę w górę, aby się upewnić.__get()
i co ważniejsze__isset()
, dane wyjściowe będą w niektórych przypadkach inne.Aby sprawdzić, czy coś się kończy, możesz użyć funkcji PHP isset (), patrz php.net . Ta funkcja sprawdzi, czy zmienna jest ustawiona i czy nie ma wartości NULL.
Przykład:
Jeśli chcesz sprawdzić, czy właściwość istnieje w klasie, możesz użyć wbudowanej funkcji property_exists ()
Przykład:
źródło
Używanie array_key_exists () na obiektach jest przestarzałe w php 7.4
Zamiast tego należy użyć isset () lub property_exists ()
odniesienie: php.net
źródło
Umieszczam tutaj moje 2 centy.
Biorąc pod uwagę następującą klasę:
wydarzy się co następuje:
Mam nadzieję, że to pomoże każdemu
źródło