我是编程世界的新手。这可能是一个非常愚蠢的问题。但我需要一个关于这个问题的清晰概念,这就是我提出这个问题的原因。
<?php
$json = '{"a":1}';
$data = json_decode($json);
echo $data->a;
?>
当我们调用一个应该
的对象时,我已经学会了$data = new json_decode($json);
为什么这个$data
作为没有new
的对象?
答案 0 :(得分:1)
这是一个json数组,它可以转换为对象或关联数组。 如果您使用该功能
$object = json_decode($array);
目标变量将被视为对象。 如果您的意愿只是将json数组解码为关联数组,则必须在数组后添加true
$assArray= json_decode($array,true);
在这种情况下,您可以将值作为普通数组访问
echo($assArray["a"]);
输出1。
但是我建议你查一下官方手册,在解释这些功能时非常清楚
答案 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();
}
现在它将是对象的类型