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!