Czy istnieje różnica między isset
i !empty
. Jeśli wykonam tę podwójną kontrolę logiczną, czy jest to poprawne w ten sposób, czy jest zbędne? i czy istnieje krótszy sposób na zrobienie tego samego?
isset($vars[1]) AND !empty($vars[1])
Czy istnieje różnica między isset
i !empty
. Jeśli wykonam tę podwójną kontrolę logiczną, czy jest to poprawne w ten sposób, czy jest zbędne? i czy istnieje krótszy sposób na zrobienie tego samego?
isset($vars[1]) AND !empty($vars[1])
Odpowiedzi:
Jest to całkowicie zbędne. empty
jest mniej więcej skrótem !isset($foo) || !$foo
i !empty
jest analogiczny do isset($foo) && $foo
. Tzn. empty
Robi to odwrotnie, isset
a dodatkowo sprawdza prawdziwość wartości.
Innymi słowy, empty
jest taki sam jak !$foo
, ale nie rzuca ostrzeżeń, jeśli zmienna nie istnieje. To jest główny punkt tej funkcji: wykonaj porównanie boolowskie bez obawy o ustawienie zmiennej.
Instrukcja przedstawia to następująco:
empty()
jest przeciwieństwem(boolean) var
, z wyjątkiem tego , że ostrzeżenie nie jest generowane, gdy zmienna nie jest ustawiona.
Możesz po prostu użyć !empty($vars[1])
tutaj.
$vars[1]
będzie, dostanie powiadomienie.
empty
jest jedną z najbardziej niezrozumianych funkcji w PHP. Mały fragment o „generowaniu żadnego ostrzeżenia” jest bardzo łatwy do przeoczenia. Kilka razy musiałem zeskanować dokumentację, aby ją znaleźć i opublikować tutaj.
empty($vars[1])
nie powoduje żadnych ostrzeżeń nawet $vars[1]
nie jest ustawiony, ale echo $vars[1]
będzie. Sprawdziłem fakt za pomocą echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.
0
za false
. PHP nie jest jedynym. Nadal nie jestem pewien, na czym polega twoja skarga.
isset()
sprawdza, czy zmienna jest ustawiona, a nie zerowa:
http://us.php.net/manual/en/function.isset.php
empty()
może zwrócić true, gdy zmienna jest ustawiona na pewne wartości:
http://us.php.net/manual/en/function.empty.php
Aby to zademonstrować, wypróbuj następujący kod z nieprzypisanym $ the_var, ustaw na 0 i ustaw na 1.
<?php
#$the_var = 0;
if (isset($the_var)) {
echo "set";
} else {
echo "not set";
}
echo "\n";
if (empty($the_var)) {
echo "empty";
} else {
echo "not empty";
}
?>
Przyjęta odpowiedź jest nieprawidłowa.
isset () NIE jest równoważne z! empty ().
Jeśli pójdziesz tą drogą, stworzysz raczej nieprzyjemne i trudne do debugowania błędy. np. spróbuj uruchomić ten kod:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
jest to odpowiednik !empty
.
$a = 0;
if (isset($a)) { //$a is set because it has some value ,eg:0
echo '$a has value';
}
if (!empty($a)) { //$a is empty because it has value 0
echo '$a is not empty';
} else {
echo '$a is empty';
}
Puste po prostu sprawdź, czy zmieniona / tablica ma wartość, jeśli sprawdzisz dokument php (pusty) zobaczysz, że te rzeczy są uważane za puste
* "" (an empty string) * 0 (0 as an integer) * "0" (0 as a string) * NULL * FALSE * array() (an empty array) * var $var; (a variable declared, but without a value in a class)
while isset sprawdza, czy zmienna isset i nie jest pusta, co można również znaleźć w php doc (isset)
To nie jest konieczne.
Jeśli zmienna nie istnieje, nie jest generowane ostrzeżenie. Oznacza to, że empty () jest w istocie zwięzłym odpowiednikiem! Isset ($ var) || $ var == false.
isset($vars[1]) AND !empty($vars[1])
jest równoważne z !empty($vars[1])
.
Przygotowałem prosty kod, aby pokazać go empirycznie.
Ostatni wiersz jest niezdefiniowaną zmienną.
+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| '' | true | true | false | false |
| ' ' | false | true | true | true |
| false | true | true | false | false |
| true | false | true | true | true |
| array () | true | true | false | false |
| NULL | true | false | false | false |
| '0' | true | true | false | false |
| 0 | true | true | false | false |
| 0.0 | true | true | false | false |
| undefined | true | false | false | false |
+-----------+---------+---------+----------+---------------------+
I kod
$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;
function compare($var)
{
print(var_export($var, true) . "|" .
var_export(empty($var), true) . "|" .
var_export(isset($var), true) . "|" .
var_export(!empty($var), true) . "|" .
var_export(isset($var) && !empty($var), true) . "\n");
}
for ($i = 1; $i <= 9; $i++) {
$var = 'var' . $i;
compare($$var);
}
@print(var_export($var10, true) . "|" .
var_export(empty($var10), true) . "|" .
var_export(isset($var10), true) . "|" .
var_export(!empty($var10), true) . "|" .
var_export(isset($var10) && !empty($var10), true) . "\n");
Niezdefiniowana zmienna musi być oceniana poza funkcją, ponieważ sama funkcja tworzy zmienną tymczasową w samym zakresie.
„Pusty”: działa tylko na zmiennych. Pusty może oznaczać różne rzeczy dla różnych typów zmiennych (sprawdź instrukcję: http://php.net/manual/en/function.empty.php ).
„isset”: sprawdza, czy zmienna istnieje i sprawdza prawdziwą wartość NULL lub false. Można go rozbroić, wywołując „rozbroić”. Jeszcze raz sprawdź instrukcję.
Użycie jednego z nich zależy od używanego typu zmiennej.
Powiedziałbym, że bezpieczniej jest sprawdzić jedno i drugie, ponieważ przede wszystkim sprawdzasz, czy zmienna istnieje, a jeśli tak naprawdę nie jest NULL lub jest pusta.
jeśli używamy tej samej strony do dodawania / edycji za pomocą przycisku przesyłania, jak poniżej
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
wtedy nie powinniśmy używać
isset($_POST['edit_id'])
bcoz edit_id
jest cały czas ustawiany bez względu na to, czy jest to strona dodawana, czy edytowana, zamiast tego należy użyć warunku poniżej
!empty($_POST['edit_id'])
empty()
funkcji:Zwraca, FALSE
jeśli var
ma niepustą i niezerową wartość.
Dobrze wiedzieć. Innymi słowy, wszystko od NULL
, 0
do „” powróci TRUE
podczas korzystania z empty()
funkcji.
isset()
zwraca funkcja:Zwraca, TRUE
jeśli var
istnieje; FALSE
Inaczej.
Innymi słowy, tylko zmienne, które nie istnieją (lub zmiennych, o ściśle NULL
wartości) powróci FALSE
na isset()
funkcji. Zwrócone zostaną wszystkie zmienne, które mają dowolny typ wartości, niezależnie od tego, czy jest 0
to pusty ciąg tekstowy itp TRUE
.