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

Dúvida no Ex. 4 da Aula 8 - Relacionando Produtos com Categorias

A resposta correta é:

<?php

function listaCategorias($conexao) {
    $categorias = array();
    $query = "select * from categorias";
    $resultado = mysqli_query($conexao, $query);
    while($categoria = mysqli_fetch_assoc($resultado)) {
        array_push($categorias, $categoria);
    }
    return $categorias;

}

Queria entender o porquê de "$categoria = mysqli_fetch_assoc($resultado)" estar dentro de um while. O símbolo de igual é um operador de atribuição então para mim não faz sentido. Dentro dos parenteses deveríamos ter alguma coisa que seja booleana, por exemplo, while(x==3).

Obrigado!

4 respostas
solução!

Oi Leonardo, tudo bem? Bom, pra explicar isso é simples, concorda que ifs e whiles dentre outras condições esperam receber algo boleano, como você mesmo já afirmou certo? Mas no PHP, o que pode ser um valor boleano? Qualquer coisa (sim qualquer coisa). se eu fizer:

if(""){
    echo 'string fazia';
}

Não aparece nada na tela, porque? porque string vazia, no PHP quando usados em condicionais é considerado FALSE, por causa da conversão automatica. O mesmo vale pra 0, NULL... Qualquer coisa diferente, é considerado TRUE na conversão. Então explicando seu exemplo:

O mysqli_fetch_assoc, vai retornar um array associativo para variavél, que na conversão para boolean, vai ser considerado TRUE, e o laço continua, e de acordo com a documentação do PHP, quando o mysqli_fetch_assoc não 'encontrar' mais nada para retornar, ele retorna NULL que é convertido para boolean. Consegue entender?

Caso queira verificar a documentação:

http://php.net/manual/en/mysqli-result.fetch-assoc.php http://php.net/manual/pt_BR/control-structures.while.php

Espero ter ajudado. Bons estudos

Então o valor cujo valor booleano será passado para checagem é o valor da variável à esquerda do igual?

Podemos dizer que sim! Mas na leitura da expressão, vai significar algo como: "este retorno é válido?" ou "Está atribuição é válida?".

Por baixo dos panos (acredito eu, rsrsrs), acontece justamente isso que você está pensando, primeiro ele faz a atribuição e depois disso ele faz a verificação.

Obrigado Wanderson, vou marcar a resposta como resolvida porque faz sentido, mas ainda seria legal ter a opinião de alguém que tenha certeza de como o processo acontece.