มันจะถูกประเมินเป็นตัวถูกดำเนินการทางซ้ายถ้าตัวถูกดำเนินการด้านซ้ายเป็นความจริงและตัวถูกดำเนินการด้านขวาเป็นอย่างอื่น
ใน pseudocode
foo = bar ?: baz;
คร่าวๆ
foo = bar ? bar : baz;
หรือ
if (bar) {
foo = bar;
} else {
foo = baz;
}
ด้วยความแตกต่างที่bar
จะได้รับการประเมินเพียงครั้งเดียว
นอกจากนี้คุณยังสามารถใช้สิ่งนี้เพื่อทำการ "ตรวจสอบตัวเอง" ของfoo
ที่แสดงในตัวอย่างรหัสที่คุณโพสต์:
foo = foo ?: bar;
สิ่งนี้จะกำหนดbar
ให้foo
ถ้าfoo
เป็นโมฆะหรือเท็จมิฉะนั้นจะfoo
ไม่มีการเปลี่ยนแปลง
ตัวอย่างเพิ่มเติม:
<?php
var_dump(5 ?: 0); // 5
var_dump(false ?: 0); // 0
var_dump(null ?: 'foo'); // 'foo'
var_dump(true ?: 123); // true
var_dump('rock' ?: 'roll'); // 'rock'
?>
โดยวิธีการที่มันเรียกว่าผู้ประกอบการเอลวิส
null
หรืออะไร เพียงแค่ว่า '