我有一个非常奇怪的问题,但首先我会解释一下背景。基本上我正在为facebook API创建一个小包装器,它使用JSON。让我们深入研究代码:
$json_object = array(
"new" => HttpUtils::makeRequest($new_url),
"old" => HttpUtils::makeRequest($old_url)
);
echo var_dump(json_decode($json_object['new'], TRUE)); // Echo 1
if (isset($json_object["new"]) && isset($json_object["old"])) {
$json_object["new"] = $this->handleFeedJSON(json_decode($json_object["new"], TRUE));
$json_object["old"] = $this->handleFeedJSON(json_decode($json_object["old"], TRUE));
} else {
return self::ERROR_JSON;
}
显然这是在一个班级,但这种背景并不重要。第一个var_dump给出以下输出:
array(2) {
["data"]=>
array(5) {
[0]=>
array(4) {
["message"]=>
string(421) ""
["story"]=>
string(60) ""
["created_time"]=>
string(24) ""
["id"]=>
string(32) ""
}
[1]=>
array(3) {
["story"]=>
string(53) ""
["created_time"]=>
string(24) ""
["id"]=>
string(32) ""
}
[2]=>
array(4) {
["message"]=>
string(51) ""
["story"]=>
string(61) ""
["created_time"]=>
string(24) ""
["id"]=>
string(32) ""
}
[3]=>
array(3) {
["story"]=>
string(53) ""
["created_time"]=>
string(24) ""
["id"]=>
string(32) ""
}
[4]=>
array(3) {
["message"]=>
string(466) ""
["created_time"]=>
string(24) ""
["id"]=>
string(32) ""
}
}
["paging"]=>
array(2) {
["previous"]=>
string(298) "link_prev"
["next"]=>
string(285) "link_next"
}
}
此输出已清空,因为这些内容并不真正相关。实际解码通过handleFeedJSON
函数进行,如下所示:
public function handleFeedJSON($feed_json) {
echo var_dump($feed_json); // Second var_dump
$json_object = array(
"new_uuid" => urlencode($this->UUIDForURL($feed_json["paging"]["next"])),
"old_uuid" => urlencode($this->UUIDForURL($feed_json["paging"]["previous"])),
"feed" => array()
);
// More json handling
}
然而,这是此脚本中var_dump的最后一部分:
// stub, same as previous var_dump
["paging"]=>
array(2) {
["previous"]=>
string(298) "prev_link"
["next"]=>
string(285) "next_link"
}
}
array(1) {
["data"]=>
array(0) {
}
}
{"new":null,"old":null}
添加了Suddeny对象!然后显然会发生索引错误等,但是我的代码显然会将这两个对象添加到json中,这会搞砸我的脚本。我是非常愚蠢的,我是将它们添加到JSON还是其他的东西?
顺便说一下,我通过Laravel本地主机使用它,但我认为这不应该给我不同的结果。
编辑问题似乎是我在数组中调用handleFeedJSON函数。当它在数组之外时,不会遇到任何错误。
答案 0 :(得分:0)
我无法从您的代码中看到确切的信息,但是当您没有预料到它时,您确实会遇到通过引用传递对象的问题。
请考虑以下代码:
function add_something($passed_var) {
if (is_array($passed_var)) {
$passed_var['key2'] = 'value2';
} else {
$passed_var->key2 = 'value2';
}
}
$arr = array('key' => 'value');
$obj = new stdClass();
$obj->key = 'value';
echo '<pre>'.print_r($arr, 1).'<br>';
echo '<pre>'.print_r($obj, 1).'<br>';
add_something($arr);
add_something($obj);
echo '<pre>'.print_r($arr, 1).'<br>';
echo '<pre>'.print_r($obj, 1).'<br>';
<强>输出:强>
Array
(
[key] => value
)
stdClass Object
(
[key] => value
)
Array
(
[key] => value
)
stdClass Object
(
[key] => value
[key2] => value2
)
最终的Object输出(在调用add_something()
之后)在函数范围之外进行了意外的修改,因为