[PHP] Czy używanie empty() w warunkach jest konieczne? |
[PHP] Czy używanie empty() w warunkach jest konieczne? |
19.10.2020, 12:24:17
Post
#1
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
Czy używanie funkcji empty() w warunkach jest konieczne? Będzie błędem, jeśli napiszę warunek bez empty()? Bo jedno i drugie rozwiązanie działa chyba identycznie...
Kod if (empty($var)) { } Kod if (!$var) {
} |
|
|
19.10.2020, 12:31:25
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Nie dziala identycznie. jesli $var nie jest zadeklarowana to poleci ci NOTICE w drugim wypadku
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
19.10.2020, 12:53:13
Post
#3
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
A gdy mam pewność, iż zmienna $var jest zadeklarowana (np. jest zwrócona przez funkcję jako konkretny typ wartości), to mogę chyba [zawsze] zapisać drugim sposobem (bez empty())?
Ten post edytował eerie 19.10.2020, 13:41:45 |
|
|
19.10.2020, 14:28:32
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Ja nie jestem zwolennikiem zapisywania w taki sposób warunków, gdy $var nie jest boolem.
Wolę tak:
empty() używam tylko z tablicami. |
|
|
20.10.2020, 11:05:52
Post
#5
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
Nasunęło mi się jeszcze jedno pytanie. A jak postępować, gdy zwracam np. z repozytorium (bazy danych) obiekt lub null (?object)? Ewentualnie wartość typu np. string lub null (?string)... Wtedy chyba powinienem użyć: if (!empty($var)) {}
|
|
|
20.10.2020, 11:24:12
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
No wtedy tym bardziej nie powinienes uzywac empty. Przeciez srting moze byc pustym tekstem a to moze byc ok.
Wtedy masz uzyc !== null -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
20.10.2020, 13:24:47
Post
#7
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
Co do sprawdzania istnienia obiektów. Dla zwracanych obiektów (typu ?object) rozumiem, że ma być [zawsze] tak samo: if ($object !== null) {}. Zmylił mnie przykład z dokumentacji, gdzie przy użyciu empty() sprawdzali, czy obiekt został utworzony. Tu też zamiast empty($object) powinno się użyć raczej isset($object) i dalej is_object($object)... Bo dla np. obiektów formularzy, które mogą zwracać pusty string '' (gdy przesłany) lub null (gdy nieprzesłany), funkcja !empty() może mieć zastosowanie, gdy chcemy sprawdzić, czy jakakolwiek wartość została podana. Choć z moich obserwacji (w Symfony) puste pole formularza (z obiektu formularza) zwraca zawsze null (czy przesłany bądź nieprzesłany). I tu też chyba powinienem przyrównywać do null...
|
|
|
20.10.2020, 13:29:11
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Jeśli zwracany obiekt to wolę
Kod if($obj instanceof ObjectInterface) to tak dla pewności że jest tu czego oczekuję. Można też null !== $obj jeśli return z metody jest typehinted |
|
|
20.10.2020, 18:59:07
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
Co do porównywania null !== $var jest coś takiego jak is_null($var).
Poza tym, dobrze zapoznać się z tabelką na https://www.php.net/manual/en/types.comparisons.php żeby nie mieć wątpliwości co daje jakie wyniki. -------------------- |
|
|
23.10.2020, 21:20:24
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Cieszyłbym się, gdyby zaczęli sprzątać PHP i m.in. usunęli is_null(). Nie lubię, gdy jedną prostą rzecz można zrobić na kilka identycznych sposobów.
|
|
|
24.10.2020, 07:40:27
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
To idąc dalej takim tokiem rozumowania można całkowicie dużo funkcji usunąć skoro jest empty oraz inne nowe operatory. Ja tam bardzo lubię is_null. A wracając do tematu. Zainstaluj sobie jakieś narzędzia typu cs fixer, ustaw zbiór własnych reguł (w tym tutaj yoda style) i masz z głowy zajmowanie się pierdołami.
-------------------- |
|
|
24.10.2020, 13:03:15
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
No i tak wg mnie powinni zrobić - zacząć usuwać. Dzisiaj już się inaczej projektuje języki, zobacz sobie takiego Swifta, albo nawet niemłodego już Pythona. Wiem, że mogę zacząć "ignorować" pewne możliwości, ale dla jakiejś tam perfekcjonistycznej części mnie to jest niedogodność
empty() nigdy nie lubiłem, a w PHP <= 5.4 ta funkcja była jeszcze bardziej irytująca, bo nie pozwalała używać wyrażeń, czyli np. to wyrzucało błąd: Dobrze zaprojektowany język nie ma takich trudnych do zapamiętania nieścisłości, wszystko powinno być klarowne zamiast kazać nam "pamiętać" o swoich dziwactwach. Dlatego jestem za sprzątaniem. Osobiście prawie nigdy nie używam is_null(), tylko $foo === null. Jedyny wyjątek to array_filter($foo, 'is_null'), array_map('is_foo', $foo) lub jakieś inne stringowe callbacki. Ale nadal bym wolał, żeby tego nie było |
|
|
Wersja Lo-Fi | Aktualny czas: 21.05.2024 - 19:00 |