为什么这个变量充当对象?

时间:2015-10-20 07:22:28

标签: php

我是编程世界的新手。这可能是一个非常愚蠢的问题。但我需要一个关于这个问题的清晰概念,这就是我提出这个问题的原因。

<?php 
  $json = '{"a":1}';
  $data = json_decode($json);
  echo $data->a; 
?>

当我们调用一个应该

的对象时,我已经学会了
$data = new json_decode($json);

为什么这个$data作为没有new的对象?

6 个答案:

答案 0 :(得分:1)

这是一个json数组,它可以转换为对象或关联数组。 如果您使用该功能

$object = json_decode($array); 

目标变量将被视为对象。 如果您的意愿只是将json数组解码为关联数组,则必须在数组后添加true

$assArray= json_decode($array,true);

在这种情况下,您可以将值作为普通数组访问

echo($assArray["a"]);

输出1。

但是我建议你查一下官方手册,在解释这些功能时非常清楚

PHP Official manual json_decode

答案 1 :(得分:0)

您需要将其存储在变量中以便像数组一样使用。

<?php 
  $json = '{"a":1}';
  $data = json_decode($json,true);
  echo $data['a']; 
?>

答案 2 :(得分:0)

默认情况下json_decode(不提供第二个参数)将返回您的对象,这意味着该函数本身将为您创建(并返回)新的stdClass

如果你想要数组:

$data = json_decode($json, true);

答案 3 :(得分:0)

这是因为你使用了一个返回实例的函数。

使用 new 运算符时,可以从className明确创建实例。举例:

function return_instance() {
    return new ClassName();
}
$obj1 = return_instance();
$obj2 = new ClassName();
// The two objects return the same type of object

答案 4 :(得分:0)

默认情况下,

json_decode会尝试返回对象而不是数组。这样做你不需要new json_decode,而只是直接调用函数。您可以通过添加第二个参数true来返回数组。

例如:

$asObject = json_decode($jsonText);
$asArray = json_decode($jsonText, true);

new关键字实质上调用了一个类的构造函数来创建一个新对象。如果您愿意,可以将json_decode视为在函数内调用new,以便为您创建新对象。

答案 5 :(得分:0)

因为json_deocde返回类型是对象类型,这里是示例

 function jsonDecode($json){
  //here logic of decoding;
   return new stdClass();

 }

现在它将是对象的类型