Phép gán liên kết null là gì ?? = toán tử trong PHP 7.4


10

Tôi vừa xem một video về các tính năng PHP 7.4 sắp tới và thấy ??=toán tử mới này . Tôi đã biết các ??nhà điều hành. Điều này khác nhau như thế nào?

Câu trả lời:


10

Từ các tài liệu :

Coalesce bằng hoặc toán tử ?? = là toán tử gán. Nếu tham số bên trái là null, gán giá trị của tham số bên phải cho tham số bên trái. Nếu giá trị không phải là null, không có gì được thực hiện.

Thí dụ:

// 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';

Vì vậy, về cơ bản nó chỉ là một tốc ký để gán giá trị nếu nó chưa được gán trước đó.


4
Cũng có vẻ như chúng tôi đã tìm thấy một lỗi đánh máy trong các tài liệu chính thức. The folloving lines...
Pavel Lint

Không chính xác 100% rằng 2 dòng đang hoạt động "giống nhau", trong trường hợp thứ hai, phía bên trái chỉ được đánh giá một lần, do đó, nó hiệu quả hơn
the_nuts

7

Trong PHP 7, điều này ban đầu được phát hành, cho phép nhà phát triển đơn giản hóa kiểm tra hiện tại () kết hợp với toán tử ternary. Ví dụ: trước PHP 7, chúng ta có thể có mã này:

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

Khi PHP 7 được phát hành, chúng tôi có khả năng thay vào đó viết:

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

Tuy nhiên, bây giờ, khi PHP 7.4 được phát hành, điều này có thể được đơn giản hóa hơn nữa thành:

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

Một trường hợp điều này không hoạt động là nếu bạn đang tìm cách gán một giá trị cho một biến khác, vì vậy bạn không thể sử dụng tùy chọn mới này. Như vậy, trong khi điều này được hoan nghênh, có thể có một vài trường hợp sử dụng hạn chế.


4

Toán tử gán kết hợp null là một cách tốc ký để gán kết quả của toán tử liên kết null.

Một ví dụ từ ghi chú phát hành chính thức :

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

1

Ví dụ Documents :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.