Ich habe ein wirklich seltsames Problem, aber zuerst werde ich den Kontext erklären. Im Grunde erstelle ich einen kleinen Wrapper für die Facebook-API, die JSON verwendet. Lassen Sie uns in den Code tauchen:Magisch erschienene Informationen über JSON decode
$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;
}
Offensichtlich ist dies in einer Klasse ist, aber das Kontext keine Rolle spielt. Der erste Var_dump gibt die folgende Ausgabe:
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"
}
}
Dieser Ausgang geleert wird, da diese Inhalte nicht wirklich relevant sind. Die eigentliche Decodierung wird durch die handleFeedJSON
Funktion gesetzt, die wie folgt aussieht:
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
}
Doch dies der letzte Teil des Var_dump in diesem Skript ist:
// 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 Objekte hinzugefügt wurden! Dann treten offensichtlich Indexfehler auf und so, jedoch fügt mein Code diese beiden Objekte anscheinend dem json hinzu, der mein Skript versaut. Bin ich wirklich dumm und füge ich diese zu der JSON hinzu oder ist etwas anderes los?
Übrigens benutze ich dies durch einen Laravel localhost, aber ich denke, das sollte mir keine anderen Ergebnisse geben.
EDIT das Problem scheint zu sein, dass ich die handleFeedJSON Funktion aus dem Array aufrufen. Wenn dies außerhalb des Arrays ist, werden keine Fehler festgestellt.
Ist es hier relevant, dass Objekte * immer * als Referenz übergeben werden? – WEBjuju
@WEBjuju Ich dachte, PHP war standardmäßig übergeben von Wert und nur durch Verweis übergeben, wenn das Symbol & in Parametern in Funktionen verwendet wird. Kannst du ein bisschen klarstellen? – engineercoding
@engineercoding Objekte werden immer als Referenz übergeben (sonst wären sie nicht so nützlich.). Alles andere wird standardmäßig als Wert übergeben. –