Avatar ·

Operador Elvis (?:) e operador de coalescência nula (??) em PHP: qual a diferença?

Olá a todos. Sou um desenvolvedor PHP iniciante e não consigo entender a diferença entre dois operadores: o operador ternário curto (também chamado de "Elvis") `?:` e o operador de coalescência nula `??`. A documentação diz que eles são semelhantes, mas eu sempre me confundo sobre qual usar. Tenho o seguinte código. Recebo dados de um formulário ou de um banco de dados e quero exibir o nome do usuário, se existir, ou "Convidado", se não: ```php $username = $_POST['username'] ?: 'Convidado'; ``` Isso funciona, mas às vezes vejo outros desenvolvedores escrevendo assim: ```php $username = $_POST['username'] ?? 'Convidado'; ``` Ambas as opções parecem fazer a mesma coisa. Mas notei que se em `$_POST['username']` vier uma string vazia `""`, a primeira opção (com `?:`) exibe "Convidado", enquanto a segunda (com `??`) exibe uma string vazia. Por que isso acontece? E qual opção é mais correta usar quando quero verificar se a variável existe e não é `null`? Outro exemplo. Tenho um array com na