การรวมค่า null ที่รวมกันคืออะไร?


9

ฉันเพิ่งเห็นวิดีโอเกี่ยวกับฟีเจอร์ PHP 7.4 ที่กำลังจะมาถึงและเห็น??=ผู้ให้บริการรายใหม่นี้ ฉันรู้จัก??ผู้ดำเนินการอยู่แล้ว แตกต่างกันอย่างไร

คำตอบ:


10

จากเอกสาร :

รวมตัวกันเท่ากับหรือ = ผู้ประกอบการเป็นผู้ประกอบการที่ได้รับมอบหมาย หากพารามิเตอร์ด้านซ้ายเป็นโมฆะให้กำหนดค่าพารามิเตอร์พารามิเตอร์ด้านขวาให้กับพารามิเตอร์ด้านซ้าย หากค่าไม่เป็นโมฆะจะไม่มีการดำเนินการใด ๆ

ตัวอย่าง:

// The folloving lines are doing the same
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
// Instead of repeating variables with long names, the equal coalesce operator is used
$this->request->data['comments']['user_id'] ??= 'value';

ดังนั้นจึงเป็นเพียงชวเลขเพื่อกำหนดค่าหากไม่ได้รับการกำหนดมาก่อน


4
ดูเหมือนว่าเราพบพิมพ์ผิดในเอกสารอย่างเป็นทางการ The folloving lines...
Pavel Lint

ไม่ถูกต้อง 100% ว่าทั้ง 2 บรรทัดกำลังทำ "เหมือนเดิม" ในกรณีที่สองด้านซ้ายจะถูกประเมินเพียงครั้งเดียวดังนั้นจึงมีประสิทธิภาพมากขึ้น
the_nuts

7

ในPHP 7นี้เปิดตัวครั้งแรกช่วยให้นักพัฒนาสามารถตรวจสอบ isset () รวมกับผู้ประกอบการที่สาม ตัวอย่างเช่นก่อน PHP 7 เราอาจมีรหัสนี้:

$data['username'] = (isset($data['username']) ? $data['username'] : 'guest');

เมื่อPHP 7เปิดตัวเราได้รับความสามารถในการเขียนสิ่งนี้แทน:

$data['username'] = $data['username'] ?? 'guest';

อย่างไรก็ตามตอนนี้เมื่อPHP 7.4ได้รับการเผยแพร่สิ่งนี้สามารถทำให้ง่ายยิ่งขึ้นไปอีก:

$data['username'] ??= 'guest';

กรณีหนึ่งที่ไม่สามารถใช้งานได้หากคุณต้องการกำหนดค่าให้กับตัวแปรอื่นดังนั้นคุณจะไม่สามารถใช้ตัวเลือกใหม่นี้ได้ ดังนั้นแม้ว่าจะมีกรณีการใช้งานที่ จำกัด


3

ตัวดำเนินการกำหนดค่าการรวมตัวกันเป็นโมฆะเป็นวิธีการกำหนดผลลัพธ์แบบย่อของตัวดำเนินการรวมตัวเป็นโมฆะแบบย่อ

ตัวอย่างจากบันทึกประจำรุ่นอย่างเป็นทางการ:

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.