(??=) Двойной вопросительный знак и знак равенства, что делает этот оператор?

Однажды я наткнулся на код php7 с оператором ??=. Я попытался найти, что он явно делает, но не смог легко найти. Я пытался прочитать операторы php, и даже на большинстве официальных ресурсов есть описание всех операторов и даже составных операторов, таких как .=, +=, но нет описания для ??=

Например, Операторы PHP хранит описания всех операторов в виде прямой формы (., +). , как составное (.=, +=), но ??= нет, и из-за этого я сначала растерялся и подумал, что это что-то совсем другое. Вопрос простой и очевидный, но в целом дело немного запутанное, поэтому я стараюсь помочь другим php-новичкам, таким как я


person Green Joffer    schedule 20.10.2020    source источник
comment
спасибо, вы правы, но, видите ли, вы просто не можете искать его случайным образом, потому что, например, гугл по вашему запросу '??=' ничего полезного не выдает - как и для двойного вопросительного знака знак равенства тоже, так что вы просто не можете узнать, где информация   -  person Green Joffer    schedule 20.10.2020
comment
Ознакомьтесь с wiki.php.net/rfc/null_coalesce_equal_operator.   -  person Siva    schedule 26.04.2021


Ответы (1)


Так что в конце концов я решил написать код и сам посмотреть, как он работает и что он делает.

В PHP7.0 был добавлен оператор Null Coalescing:

$username = $_GET['username'] ?? 'not passed'; 

Наше $username будет иметь значение $_GET['username'] - если оно существует и не равно нулю, иначе $username получит строку "не передано". Но иногда может возникнуть ситуация, когда нужно проверить на существование и необнуляемость самой переменной:

$first_test = $first_test ?? 'not started';

И в этой ситуации вы можете использовать составную версию оператора объединения null - '??=':

$first_test ??= 'not started';

Вот и все, просто составная версия '??' для случаев, когда вы проверяете саму переменную.

person Green Joffer    schedule 20.10.2020
comment
??= был добавлен только в php 7.4 и выше - демонстрация - документация - person DarkBee; 20.10.2020
comment
спасибо, не знал, что оператор и его стенография выпускались в разных версиях - person Green Joffer; 20.10.2020