Zastanawiam się, jaka jest różnica między tymi dwoma przypadkami, a która z nich jest zalecana?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
Zastanawiam się, jaka jest różnica między tymi dwoma przypadkami, a która z nich jest zalecana?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
Spójrz na PHP type comparison table.
Jeśli zaznaczysz tabelę, zauważysz, że dla wszystkich przypadków empty($x)
jest taka sama jak !$x
. Sprowadza się to do obsługi niezainicjowanych zmiennych. !$x
tworzy E_NOTICE
, podczas gdy empty($x)
nie.
Jeśli użyjesz pustego, a zmienna nigdy nie zostanie ustawiona/utworzona, nie zostanie wygenerowane ostrzeżenie/błąd.
Zobaczmy:
Następujące rzeczy są uważane za
empty
:
""
(pusty ciąg znaków)0
(0
jako liczba całkowita)0.0
(0
jako pływak)"0"
(0
jako łańcuch)NULL
FALSE
array()
(pusta tablica)var $var;
(zmienna uznane, ale bez wartości w klasa)
Podczas przekształcania do wartości logicznej następujące wartości uznaje
FALSE
:
- logiczna
FALSE
sam- liczbę całkowitą
0
(zero)- pływak
0.0
(zero)- pusty ciąg znaków i ciąg znaków
"0"
- tablicą zero elementów
- przedmiotem zero zmiennych składowych (PHP 4 jedynie)
- specjalny typ
NULL
(w tym zmiennych wyłączony)SimpleXML
obiektów utworzone z pustych znaczników
Wydaje się, że jedyną różnicą (w odniesieniu do wartości wynikowej) jest sposób obsługi instancji SimpleXML
.Cała reszta wydaje się dawać taki sam wynik (jeśli oczywiście odwracasz boolean).
Więc jaki jest wniosek? Z listy wynika, że boolean wygląda na bardziej niezawodny test ... –
To jest nieprawidłowe. Szybki test w powłoce PHP ujawnia, że 'empty' obsługuje puste instancje' SimpleXMLElement', takie jak '!' Does; jest to po prostu błąd w "pustej" dokumentacji, że nie są tam wymienione. –
+1. Zauważ także, że jest to to samo, co '! = [Wynik boolowski wartości $ val]', więc ostatnia kolumna pierwszej tabeli jest najczęściej tym, na co powinieneś patrzeć. – rockerest
+1 Ładne znalezisko w tabeli porównawczej. –
Dzięki, to właśnie musiałem wiedzieć. Więc myślę, że puste ($ x) jest bezpieczniejsze podejście. Zakładam, że różnica jest pomijalna pod względem wydajności, prawda? – Bachx