Olá, Victor!
No PHP, o "?" antes do tipo de uma variável em uma função indica que o parâmetro é opcional e pode ser de tipo NULL, além do tipo especificado.
No caso da função mb_convert_case(string $string, int $mode, ?string $encoding = null): string
, o "?" antes de "string" indica que o parâmetro $encoding pode ser de tipo NULL ou string. Quando você vê "= null" depois do parâmetro, isso significa que o valor padrão do parâmetro é NULL, ou seja, se você não passar nada para $encoding quando chamar a função, ele será considerado como NULL.
Por exemplo, se você chamar a função assim: mb_convert_case('Olá, Mundo!', MB_CASE_UPPER)
, o PHP vai entender como se você tivesse chamado assim: mb_convert_case('Olá, Mundo!', MB_CASE_UPPER, null)
.
Espero ter ajudado e bons estudos!