มีความแตกต่างระหว่างและisset
!empty
ถ้าฉันทำแบบบูลตรวจสอบสองครั้งนี้จะถูกต้องด้วยวิธีนี้หรือซ้ำซ้อน? และมีวิธีที่สั้นกว่าในการทำสิ่งเดียวกันหรือไม่?
isset($vars[1]) AND !empty($vars[1])
มีความแตกต่างระหว่างและisset
!empty
ถ้าฉันทำแบบบูลตรวจสอบสองครั้งนี้จะถูกต้องด้วยวิธีนี้หรือซ้ำซ้อน? และมีวิธีที่สั้นกว่าในการทำสิ่งเดียวกันหรือไม่?
isset($vars[1]) AND !empty($vars[1])
คำตอบ:
นี่คือการซ้ำซ้อนอย่างสมบูรณ์ empty
จะมากหรือน้อยกว่าสำหรับการจดชวเลข!isset($foo) || !$foo
และจะคล้ายคลึงกับ!empty
isset($foo) && $foo
คือempty
จะเป็นสิ่งที่กลับจากการisset
บวกการตรวจสอบเพิ่มเติมสำหรับtruthinessของค่า
หรือกล่าวอีกนัยหนึ่งempty
ก็เหมือนกัน!$foo
แต่จะไม่ส่งสัญญาณเตือนหากไม่มีตัวแปร นั่นคือประเด็นหลักของฟังก์ชั่นนี้: ทำการเปรียบเทียบบูลีนโดยไม่ต้องกังวลกับตัวแปรที่ตั้งไว้
คู่มือทำให้เป็นแบบนี้:
empty()
อยู่ฝั่งตรงข้ามของ(boolean) var
, ยกเว้นว่าไม่มีคำเตือนถูกสร้างขึ้นเมื่อตัวแปรไม่ได้ตั้งค่า
คุณสามารถใช้!empty($vars[1])
ที่นี่
$vars[1]
เขาก็จะได้รับการแจ้งเตือน
empty
เป็นหนึ่งในฟังก์ชันที่เข้าใจผิดมากที่สุดใน PHP ตัวอย่างเล็ก ๆ เกี่ยวกับ "ไม่มีคำเตือนถูกสร้างขึ้น" นั้นมองข้ามได้ง่ายมาก ฉันต้องสแกนเอกสารด้วยตัวเองสองสามครั้งเพื่อตรวจดูการโพสต์ที่นี่
empty($vars[1])
ไม่ก่อให้เกิดคำเตือนใด ๆ แม้$vars[1]
จะไม่ได้ตั้งค่า แต่echo $vars[1]
จะ echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
ฉันจะตรวจสอบความเป็นจริงโดยใช้
0
false
PHP ไม่ใช่คนเดียว ยังไม่แน่ใจว่าคำร้องเรียนของคุณคืออะไร
isset()
ทดสอบว่าตัวแปรถูกตั้งค่าไว้หรือไม่และไม่เป็นโมฆะ:
http://us.php.net/manual/en/function.isset.php
empty()
สามารถคืนค่าจริงเมื่อตัวแปรถูกตั้งค่าเป็นค่าที่แน่นอน:
http://us.php.net/manual/en/function.empty.php
เพื่อสาธิตสิ่งนี้ลองใช้รหัสต่อไปนี้ด้วย $ the_var ที่ไม่ได้กำหนดตั้งค่าเป็น 0 และตั้งค่าเป็น 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";
}
?>
คำตอบที่ยอมรับไม่ถูกต้อง
isset () ไม่เทียบเท่ากับ! empty ()
คุณจะสร้างข้อบกพร่องที่ค่อนข้างไม่พึงประสงค์และยากที่จะแก้ไขข้อบกพร่องหากคุณไปตามเส้นทางนี้ เช่นลองใช้รหัสนี้:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
!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';
}
ว่างเปล่าเพียงตรวจสอบคือตัวแปรอ้างอิง / อาร์เรย์มีค่าถ้าคุณตรวจสอบphp doc (ว่าง)คุณจะเห็นสิ่งนี้ถือว่าเป็น 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)
ในขณะที่ isset ตรวจสอบว่าตัวแปร isset และไม่เป็นโมฆะซึ่งสามารถพบได้ในphp doc (isset)
มันไม่จำเป็น
ไม่มีการสร้างคำเตือนหากไม่มีตัวแปร นั่นหมายความว่า empty () คือความรัดกุมเทียบเท่ากับ! isset ($ var) || $ var == false
isset($vars[1]) AND !empty($vars[1])
!empty($vars[1])
เทียบเท่ากับ
ฉันเตรียมรหัสง่าย ๆ เพื่อแสดงให้ประจักษ์
แถวสุดท้ายเป็นตัวแปรที่ไม่ได้กำหนด
+-----------+---------+---------+----------+---------------------+
| 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 |
+-----------+---------+---------+----------+---------------------+
และรหัส
$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");
ตัวแปรที่ไม่ได้กำหนดจะต้องถูกประเมินนอกฟังก์ชั่นเพราะฟังก์ชั่นจะสร้างตัวแปรชั่วคราวในขอบเขตนั้น
"Empty": ใช้ได้กับตัวแปรเท่านั้น ว่างอาจหมายถึงสิ่งต่าง ๆ สำหรับตัวแปรชนิดต่าง ๆ (ตรวจสอบด้วยตนเอง: http://php.net/manual/en/function.empty.php )
"isset": ตรวจสอบว่าตัวแปรนั้นมีอยู่และตรวจสอบค่า NULL จริงหรือเท็จ สามารถยกเลิกได้โดยเรียก "unset" ตรวจสอบคู่มืออีกครั้ง
การใช้อย่างใดอย่างหนึ่งขึ้นอยู่กับประเภทตัวแปรที่คุณใช้
ฉันจะบอกว่ามันปลอดภัยกว่าที่จะตรวจสอบทั้งสองอย่างเพราะคุณกำลังตรวจสอบก่อนอื่นถ้าตัวแปรนั้นมีอยู่และถ้าไม่ใช่ NULL หรือเปล่าจริง ๆ
หากเราใช้หน้าเดียวกันเพื่อเพิ่ม / แก้ไขผ่านปุ่มส่งเหมือนด้านล่าง
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
จากนั้นเราไม่ควรใช้
isset($_POST['edit_id'])
bcoz edit_id
ถูกตั้งค่าไว้ตลอดเวลาไม่ว่าจะเป็นหน้าเพิ่มหรือแก้ไข แต่เราควรใช้เงื่อนไขการตรวจสอบด้านล่าง
!empty($_POST['edit_id'])
empty()
ฟังก์ชั่น:ส่งคืนFALSE
ถ้าvar
มีค่าที่ไม่ว่างเปล่าและไม่เป็นศูนย์
นั่นเป็นเรื่องดีที่จะรู้ กล่าวอีกอย่างคือทุกอย่างตั้งแต่NULL
ถึง0
ถึง "จะกลับมาTRUE
เมื่อใช้งานempty()
ฟังก์ชั่น
isset()
ฟังก์ชันส่งคืนอย่างไร:ส่งคืนTRUE
ถ้าvar
มีอยู่ FALSE
มิฉะนั้น.
กล่าวอีกนัยหนึ่งเฉพาะตัวแปรที่ไม่มีอยู่ (หรือตัวแปรที่มีNULL
ค่าอย่างเคร่งครัด) จะกลับมาFALSE
ที่isset()
ฟังก์ชัน ตัวแปรทั้งหมดที่มีประเภทของค่าใด ๆ ไม่ว่าจะเป็น0
สตริงข้อความว่างเปล่าและอื่น ๆ TRUE
จะกลับมา