ตัวดำเนินการ 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;