1- A função compact vai buscar se a string que você passou para ela como argumento é uma variável existente no seu código, se não for, o compact vai ignorar a string passada e utilizar somente as strings que correspondem a uma variável valida .
$nome = 'karolina';
$sobrenome = "gomes";
$dados = compact('nome', 'sobrenome', 'idade');
print_r($dados);
Resultado:
Array
(
[nome] => karolina
[sobrenome] => gomes
)
Como a variável $idade não definida em nenhum lugar do código a função compact não vai adicionar ela no array .
2 - http://devblog.drall.com.br/como-obter-o-nome-de-uma-variavel-no-php
Nesse link ele mostra como pegar o nome da variável, acredito que conseguindo fazer isso você irá conseguir implementar
um código que funcione sem usar o extract, não fiz aqui porque talvez ficaria um pouco grande ou não, mas se não conseguir pode falar que respondo com o código... obs: se tem uma função pronta, é recomendável usa-lá, como o professor fala no curso: se já existe, não devemos recriar a roda...
Mas as vezes é bom fazer isso, mas só pra estudo mesmo.
3 - essa aqui acho melhor esperar o professor kkk, não tive nenhum caso de uso até agr com ela, por isso não sei mt bem como implementar , mas não deve ser mt complexo.