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

a diferença entre o objeto e o array usando true ou não como parametro

Eu utilizei o json_decode sem o true (ou false como padrão) pois ele transforma o arquivo em objeto, mas na resolução esta para usar com true, que transforma em array, o que me confundiu. Qual a diferença entre os dois e quando eu utilizo cado um deles. aqui esta meu codigo:

<?php

require_once __DIR__ . '/texto.txt';

$pegaTexto = file_get_contents(__DIR__ . '/texto.txt');
$texto = json_decode($pegaTexto);

var_dump($texto);
2 respostas
solução!

Bom dia colega

Sem o parâmetro true (Padrão: Objeto)

Quando você faz $texto = json_decode($pegaTexto);, o PHP cria um objeto genérico da classe stdClass.

  • Como acessar os dados: Você deve usar a sintaxe de setas.
    Exemplo: $texto->nome ou $texto->profissao.
  • Quando usar: É muito comum utilizar assim quando você quer manter uma sintaxe orientada a objetos ou quando pretende mapear esses dados para uma classe específica depois.

Com o parâmetro true (Array Associativo)

Quando você faz $texto = json_decode($pegaTexto, true);, o PHP transforma o JSON em um array associativo (onde os índices são nomes).

  • Como acessar os dados: Você usa colchetes e as chaves (strings).
    Exemplo: $texto['nome'] ou $texto['profissao'].
  • Quando usar: É muito útil quando você precisa iterar sobre os dados (usar foreach), usar funções nativas de array do PHP (como filtrar ou ordenar) ou quando a estrutura dos dados é mais simples e não requer o comportamento de um objeto.

Resumo para o exercício

No seu código:

$texto = json_decode($pegaTexto);
var_dump($texto);
// Isso vai imprimir algo como: object(stdClass)

Na resposta do instrutor:

var_dump(json_decode($stringJson, true));
// Isso vai imprimir algo como: array(3)

Ambos funcionam para ler os dados, mas a forma de escrever o código depois muda (seta -> versus colchetes []).

Obrigado pela ajuda, deu pra entender muito bem !