Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Erro

Pessoal, estou recebendo um erro.

Código:

$notas = [ 
   ['Aluno' => 'Maria', 'nota' => 8], 
   ['Aluno' => 'Ana', 'nota' => 5]
];


function ordenaNotas(array $nota1, array $nota2) :int{
   if($nota1['nota'] > $nota2['nota']){
      return -1;
   }
   else if($nota2['nota'] > $nota1['nota']){
      return 1;
   }
   return 0;
} 

usort(&array: $notas, callback: 'ordenaNotas');

erro:

Syntax error: unexpected token &
8 respostas

Olá, Caio. Tudo bem?

Esse erro está acontecendo porque você adicionou as seguintes expressões: &array: e callback:, nas aulas essa informação aparece mas é só uma "ajuda" da IDE PHPStorm para indicar quais tipos são os parâmetros que estão sendo passados para a função.

Para funcionar, sugiro que você deixe da seguinte maneira:

usort(&array: $notas, callback: 'ordenaNotas');

Qualquer dúvida estou à disposição, bons estudos :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓

FAla, mestre! Valeu pela resposta. Mas eu não estou vendo nenhuma diferença entre o código que você sugeriu e o que eu escrevi.

ps: tô gostando demais de estudar php contigo!

Eita, eu copiei o seu código e esqueci de remover kkk, acontece... ficará da seguinte maneira:

usort($notas, 'ordenaNotas');

Pô, agradeço os elogios, mas eu sou apenas o Xará do Vinicius Dias, temos apenas o primeiro nome igual haha :D Mas é isso aê o cara é fera!

HAhahahaha foi mal, Vinicius! Segunda vez que confundo, a primeira foi noe vento de fim de ano xD

Aquilo de antes é só uma indicação da IDE então, não tem nenhuma função no código?

Tranquilo, Caio :D Aconteceee

Isso mesmo, é só uma ajuda que a IDE mostra, pode fazer o teste que irá funcionar :D

MAis uma coisa: assim funciona:

function ordenaNotas(array $nota1, array $nota2) :int{
   return $nota1['nota'] <=> $nota2['nota'];
}

usort(array: $notas, callback: 'ordenaNotas');

sabe por que?

solução!

Então, Caio.

Isso se chama parâmetros nomeados, que permite a passagem de argumentos para uma função utilizando os nomes dos parâmetros, ao invés da posição do parâmetros como é mais comum de se ver nos códigos.

Por exemplo, vamos supor que temos a seguinte função que imprime nome e sobrenome:

function imprimeNome(string $nome, string $sobrenome){
    echo "Olá meu nome é $nome $sobrenome" .PHP_EOL;
}

Sendo assim, a forma mais comum de se chamar essa função, é passando os parâmetros pela posição dos parâmetros, ou seja, devemos passar os valores na mesma ordem que eles foram declarados, da seguinte maneira:

function imprimeNome(string $nome, string $sobrenome){
    echo "Olá meu nome é $nome $sobrenome" .PHP_EOL;
}

imprimeNome("Caio","Martinez");

O resultado impresso na tela será Olá meu nome é Caio Martinez.

Contudo, podemos deixar mais explícito usando os parâmetros nomeados , que indicamos o nome dos parâmetros da seguinte maneira:

function imprimeNome(string $nome, string $sobrenome){
    echo "Olá meu nome é $nome $sobrenome" .PHP_EOL;
}

imprimeNome(nome: "Caio", sobrenome: "Martinez");

O resultado impresso na tela será Olá meu nome é Caio Martinez.

Você pode me perguntar:

Tá, Vinicius, mas quais os benefícios disso?

Bom, o código fica mais legível e te dar a oportunidade de não seguir a ordem que os parâmetros foram definidos, ou seja, você pode chamar a função dessa maneira que o resultado será o mesmo:

function imprimeNome(string $nome, string $sobrenome){
    echo "Olá meu nome é $nome $sobrenome" .PHP_EOL;
}

imprimeNome(sobrenome: "Martinez", nome: "Caio");

O resultado impresso na tela será Olá meu nome é Caio Martinez.

Veja que este recurso te dá essa flexibilidade :D

Espero ter esclarecido suas dúvidas, Caio :)

Excelente! Muito obrigado Vinícius! =D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software