Có sự khác biệt giữa isset
và !empty
. Nếu tôi thực hiện kiểm tra boolean kép này, nó có đúng theo cách này hay không? và có cách nào ngắn hơn để làm điều tương tự không?
isset($vars[1]) AND !empty($vars[1])
Có sự khác biệt giữa isset
và !empty
. Nếu tôi thực hiện kiểm tra boolean kép này, nó có đúng theo cách này hay không? và có cách nào ngắn hơn để làm điều tương tự không?
isset($vars[1]) AND !empty($vars[1])
Câu trả lời:
Điều này là hoàn toàn dư thừa. empty
là ít hoặc ít tốc ký cho !isset($foo) || !$foo
, và !empty
tương tự như isset($foo) && $foo
. Tức là empty
làm điều ngược lại với isset
cộng với một kiểm tra bổ sung cho truthiness của một giá trị.
Hay nói cách khác, empty
giống như !$foo
, nhưng không đưa ra cảnh báo nếu biến không tồn tại. Đó là điểm chính của chức năng này: thực hiện so sánh boolean mà không cần lo lắng về biến được đặt.
Hướng dẫn đặt nó như thế này:
empty()
ngược lại(boolean) var
, ngoại trừ việc không có cảnh báo nào được tạo khi biến không được đặt.
Bạn chỉ có thể sử dụng !empty($vars[1])
ở đây.
$vars[1]
anh sẽ nhận được thông báo.
empty
là một trong những hàm bị hiểu sai nhiều nhất trong PHP. Đoạn trích nhỏ về "không có cảnh báo nào được tạo ra" rất dễ bị bỏ qua. Tôi đã phải quét tài liệu một vài lần để phát hiện ra nó để đăng nó ở đây.
empty($vars[1])
không gây ra bất kỳ cảnh báo nào thậm chí $vars[1]
không được thiết lập, nhưng echo $vars[1]
sẽ. Tôi đã kiểm tra thực tế bằng cách sử dụng echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.
0
là false
. PHP không phải là người duy nhất. Vẫn không chắc chắn khiếu nại của bạn là gì.
isset()
kiểm tra nếu một biến được đặt và không null:
http://us.php.net/manual/en/feft.isset.php
empty()
có thể trả về true khi biến được đặt thành các giá trị nhất định:
http://us.php.net/manual/en/feft.empty.php
Để chứng minh điều này, hãy thử đoạn mã sau với $ the_var chưa được gán, đặt thành 0 và đặt thành 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";
}
?>
Câu trả lời được chấp nhận là không chính xác.
isset () KHÔNG tương đương với! trống ().
Bạn sẽ tạo ra một số lỗi khá khó chịu và khó gỡ lỗi nếu bạn đi xuống tuyến đường này. ví dụ: thử chạy mã này:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
tương đương với !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';
}
Trống chỉ kiểm tra là biến / mảng được giới thiệu có giá trị nếu bạn kiểm tra tài liệu php (trống) bạn sẽ thấy những thứ này được coi là emtpy
* "" (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)
trong khietet kiểm tra xem biến ngay lập tức và không null cũng có thể được tìm thấy trong tài liệu php (isset)
Nó không phải là cần thiết.
Không có cảnh báo nào được tạo nếu biến không tồn tại. Điều đó có nghĩa là rỗng () về cơ bản là tương đương ngắn gọn với! Oseet ($ var) || $ var == sai.
isset($vars[1]) AND !empty($vars[1])
tương đương với !empty($vars[1])
.
Tôi đã chuẩn bị mã đơn giản để hiển thị nó theo kinh nghiệm.
Hàng cuối cùng là biến không xác định.
+-----------+---------+---------+----------+---------------------+
| 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 |
+-----------+---------+---------+----------+---------------------+
Và mã
$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");
Biến không xác định phải được đánh giá ngoài hàm, vì chính hàm tạo biến tạm thời trong chính phạm vi.
"Trống": chỉ hoạt động trên các biến. Trống có thể có nghĩa là những thứ khác nhau cho các loại biến khác nhau (kiểm tra hướng dẫn sử dụng: http://php.net/manual/en/feft.empty.php ).
"isset": kiểm tra xem biến có tồn tại không và kiểm tra giá trị NULL đúng hay sai. Có thể không được đặt bằng cách gọi "unset". Một lần nữa, kiểm tra hướng dẫn.
Việc sử dụng một trong hai loại phụ thuộc vào loại biến bạn đang sử dụng.
Tôi sẽ nói, sẽ an toàn hơn khi kiểm tra cả hai, bởi vì trước hết bạn đang kiểm tra xem biến đó có tồn tại không và nếu nó không thực sự là NULL hay trống.
nếu chúng tôi sử dụng cùng một trang để thêm / chỉnh sửa thông qua nút gửi như bên dưới
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
sau đó chúng ta không nên sử dụng
isset($_POST['edit_id'])
bcoz edit_id
được đặt mọi lúc cho dù đó là thêm hoặc chỉnh sửa trang, thay vào đó chúng ta nên sử dụng kiểm tra dưới điều kiện
!empty($_POST['edit_id'])
empty()
chức năng:Trả về FALSE
nếu var
có giá trị không trống và khác không.
Đó là một điều tốt để biết. Nói cách khác, mọi thứ từ NULL
, đến 0
đến tầm khắc sẽ trở lại TRUE
khi sử dụng empty()
chức năng.
isset()
hàm trả về:Trả về TRUE
nếu var
tồn tại; FALSE
nếu không thì.
Nói cách khác, chỉ các biến không tồn tại (hoặc, các biến có NULL
giá trị nghiêm ngặt ) sẽ trả FALSE
về isset()
hàm. Tất cả các biến có bất kỳ loại giá trị nào, cho dù đó là 0
, một chuỗi văn bản trống, v.v. sẽ trả về TRUE
.