Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Czy używanie empty() w warunkach jest konieczne?
Forum PHP.pl > Forum > Przedszkole
eerie
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) {
}
nospor
Nie dziala identycznie. jesli $var nie jest zadeklarowana to poleci ci NOTICE w drugim wypadku
eerie
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())?
SmokAnalog
Ja nie jestem zwolennikiem zapisywania w taki sposób warunków, gdy $var nie jest boolem.

Wolę tak:

  1. if ($var !== '') {/* dla string */}
  2. if ($var !== 0) {/* dla int */}
  3. if ($var !== null) {/* dla nullable */}
  4. if ($var) {/* dla bool */}


empty() używam tylko z tablicami.
eerie
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)) {}
nospor
No wtedy tym bardziej nie powinienes uzywac empty. Przeciez srting moze byc pustym tekstem a to moze byc ok.

Wtedy masz uzyc !== null
eerie
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... smile.gif
Pyton_000
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
vokiel
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.
SmokAnalog
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.
viking
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.
SmokAnalog
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ść biggrin.gif

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:

  1. $foo = empty(1 + 0);


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 smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.