ตัวดำเนินการ double ที่ไม่ทำใน PHP คืออะไร
ตัวอย่างเช่น:
return !! $row;
รหัสด้านบนจะทำอะไร?
ตัวดำเนินการ double ที่ไม่ทำใน PHP คืออะไร
ตัวอย่างเช่น:
return !! $row;
รหัสด้านบนจะทำอะไร?
คำตอบ:
ไม่ใช่ "ตัวดำเนินการที่ไม่เป็นสองเท่า" ไม่ใช่ตัวดำเนินการที่ใช้สองครั้ง สิทธิที่!
จะมีผลในแบบบูล, โดยไม่คำนึงถึงตัวถูกดำเนินการ จากนั้นทางซ้าย!
จะลบล้างบูลีนนั้น
ซึ่งหมายความว่าสำหรับค่าจริงใด ๆ (ตัวเลขอื่นนอกเหนือจากศูนย์สตริงและอาร์เรย์ที่ไม่ว่าง ฯลฯ ) คุณจะได้รับค่าบูลีนTRUE
และสำหรับค่าเท็จใด ๆ (0, 0.0, NULL
สตริงว่างหรืออาร์เรย์ว่าง) คุณจะได้รับ FALSE
ค่าบูลีน
มันเทียบเท่ากับการใช้งานกับนักแสดงboolean
:
return (bool)$row;
!!
เท่ากับ(bool)
ในกรณีนี้หรือไม่? หรือจะเรียกใช้รหัสเครื่องที่แตกต่างกันขึ้นอยู่กับว่าจะใช้รหัสใด
!value
(bool) value
มันเหมือนกัน (หรือเกือบเหมือนกัน - อาจจะมีบางกรณีที่มุม) เป็นชี้ขาดให้บูล หาก$row
จะทำให้เป็นจริงก็!! $row
เป็นจริงเช่นกัน
แต่ถ้าคุณต้องการที่จะประสบความสำเร็จ(bool) $row
คุณควรใช้คำนั้น - ไม่ใช่คำที่ "น่าสนใจ")
!!
เป็นนิสัยที่เหลือจากการเขียนโปรแกรมใน C (++) ใน C ทำหล่อไม่ได้เป็นเรื่องง่ายเหมือนใน PHP, คุณจะได้รับปัญหาที่แตกต่างกันหลายคำเตือนรวบรวม Aso ดังนั้นคนที่โยนไป Boll !!
โดยใช้
operator!
ใช้งานมากเกินไปการใช้งานในC++
นั้นอาจเป็นอันตรายได้ นอกจากนี้คุณไม่สามารถร่าย structs ใน C หรือใช้!
กับพวกมันได้ นอกจากนี้หากบางสิ่งสามารถถูกทำให้ยุ่งเหยิงได้คุณมีโอกาสมากที่สุดที่จะคืนค่ามันจากฟังก์ชันที่ส่งคืนค่า int ซึ่งค่อนข้างทำให้บูลีน คุณแน่ใจหรือว่าคุณกำลังพูดถึง C
!!
ไม่มีอะไร "น่าสนใจ" ตามที่คุณอ้างสิทธิ์ มันอยู่ทั่วทุกที่ตั้งแต่ C ถึง JavaScript
มันหมายความว่าถ้า$row
มีtruthyคุ้มค่าก็จะกลับtrue
มิฉะนั้นfalse
แปลงเป็นค่าบูลีน
นี่คือตัวอย่างนิพจน์การแปลงบูลีนจาก php docs
Expression Boolean
$x = ""; FALSE
$x = null; FALSE
var $x; FALSE
$x is undefined FALSE
$x = array(); FALSE
$x = array('a', 'b'); TRUE
$x = false; FALSE
$x = true; TRUE
$x = 1; TRUE
$x = 42; TRUE
$x = 0; FALSE
$x = -1; TRUE
$x = "1"; TRUE
$x = "0"; FALSE
$x = "-1"; TRUE
$x = "php"; TRUE
$x = "true"; TRUE
$x = "false"; TRUE
"ไม่ใช่ไม่" เป็นวิธีที่สะดวกในหลายภาษาสำหรับการทำความเข้าใจความจริงค่าภาษาที่กำหนดให้กับผลของการแสดงออกใด ๆ ตัวอย่างเช่นในPython :
>>> not not []
False
>>> not not [False]
True
สามารถสะดวกในสถานที่ที่คุณต้องการลดค่าที่ซับซ้อนลงไปเป็นอย่างเช่น "มีค่าหรือไม่?"
อีกคนมากขึ้นอาจจะง่ายกว่าวิธีการ 'อ่าน' ไม่ใช่:
ครั้งแรก '!' ทำ 2 สิ่ง: 'แปลง' ค่าเป็นบูลีนแล้วเอาท์พุทตรงกันข้าม ดังนั้นมันจะเป็นจริงถ้าค่านั้นเป็น 'เท็จ'
ที่สอง '!' เป็นเพียงการส่งออกตรงข้ามของแรก
ดังนั้นโดยทั่วไปค่าอินพุตอาจเป็นอะไรก็ได้อาจเป็นสตริง แต่คุณต้องการเอาต์พุตบูลีนดังนั้นให้ใช้ '!' ตัวแรก ณ จุดนี้ถ้าคุณต้องการ TRUE เมื่อค่าอินพุตเป็น 'เท็จ' ให้หยุดที่นี่และใช้เพียงครั้งเดียว '!'; มิฉะนั้นถ้าคุณต้องการ TRUE เมื่อค่าอินพุตเป็น 'ความจริง' แล้วเพิ่มอีก '!'
ให้ดู
!$a;
แทนที่จะตีความ! ผู้ประกอบการเช่นเดียวกับการ
บูลีนตรงข้ามของค่าทางด้านขวา
อ่าน
นำบูลีนตรงข้ามกับนิพจน์ไปทางขวา
ในกรณีนี้
$a;
อาจเป็นการแสดงออก
เพื่อเป็น
!$a;
เช่นนั้น
!!$a;
และ
!!!$a;
และอื่น ๆ เนื่องจากสิ่งเหล่านี้คือการแสดงออกที่ถูกต้อง! ผู้ประกอบการสามารถได้รับการเสริมให้แต่ละคน
return (bool) $row;