Що таке присвоєння нулю присвоєння ?? = оператор у PHP 7.4


10

Я щойно бачив відео про майбутні функції PHP 7.4 і бачив цього ??=нового оператора. Я вже знаю ??оператора. Як це відрізняється?

Відповіді:


10

З документів :

Coalesce рівний або ?? = оператор - це оператор присвоєння. Якщо лівий параметр є нульовим, призначає лівому значення правого параметра. Якщо значення не є нульовим, нічого не робиться.

Приклад:

// 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...
Павло Линт

не на 100% точно, що два рядки роблять "те саме", у другому випадку лівий бік оцінюється лише один раз, тому це більш ефективно
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';

Один випадок, коли це не працює, якщо ви хочете призначити значення іншій змінній, тому ви не зможете використовувати цю нову опцію. Таким чином, хоча це вітається, може бути кілька обмежених випадків використання.


4

Оператор призначення нульового згортання - це стислий спосіб присвоєння результату оператора зведення нуля.

Приклад із офіційних приміток випуску :

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.