json_decode (Userreminder, Extension Manager Plus und andere)

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Antworten
Benutzeravatar
IMC
Mitglied
Beiträge: 658
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

json_decode (Userreminder, Extension Manager Plus und andere)

Beitrag von IMC »

edit LukeWCS: abgetrennt von viewtopic.php?t=244082
LukeWCS hat geschrieben: 05.01.2025 20:10 Wir speichern z.B. beide via JSON
Ich musste mich gerade zwangsweise etwas näher mit JSON beschäftigen, da ich ein Problem mit Umlauten hatte. (Jetzt gelöst. :) )

Deshalb habe ich mir bei euch mal angeschaut wie ihr mit JSON kodierten Strings umgeht. Dabei ist mir aufgefallen, dass ihr bei json_decode() den zweiten Parameter nicht immer auf true setzt, um ein PHP-Array zu erzeugen. Der Rückgabewert von json_decode() wird jedoch wie ein Array behandelt. Ohne den Parameter true wird ein Objekt zurückgegeben.

Das dies ohne Probleme geht weis ich, da ich vorher den Parameter auch nicht nutzte. Jetzt nutze ich ihn um eventuellen späteren Problemen vorzubeugen.
Zuletzt geändert von LukeWCS am 06.01.2025 22:21, insgesamt 1-mal geändert.
Gruß, Thorsten
Benutzeravatar
Mike-on-Tour
Supporter
Supporter
Beiträge: 1223
Registriert: 13.01.2020 21:09
Kontaktdaten:

Re: [3.2][3.3][CDB] Userreminder

Beitrag von Mike-on-Tour »

Hallo Thorsten,
gehört jetzt nicht so zum Thema "Userreminder", aber gem. PHP Dokumentation legt der zweite Parameter fest, ob du ein assoziatives oder ein nicht-assoziatives Array erzeugst. Die Verwendung hängt also davon ab, was vorher mit json_encode() umgewandelt wurde.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2767
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: [3.2][3.3][CDB] Userreminder

Beitrag von LukeWCS »

nAbend Thorsten
IMC hat geschrieben: 06.01.2025 21:25 Dabei ist mir aufgefallen, dass ihr bei json_decode() den zweiten Parameter nicht immer auf true setzt, um ein PHP-Array zu erzeugen.
Jupp da muss man differenzieren. Hier gehts um ein einfaches eindimensionales Array mit numerischem Index und numerischen Werten. Das wird, egal ob true oder false als zweiter Parameter, immer als Array zurückgegeben, darum kann der zweite Parameter entfallen. Ganz anders sieht es aus, wenn wir ein Mapping haben, also ein assoziatives Array. Darum setze ich den zweiten Parameter bei EMP immer auf true, weil das nur mit assoziativen Arrays hantiert und ich da kein Objekt brauchen kann. Bei FAR lass ich den Parameter weg, weil ich da nur mit eindimensionalen Arrays mit numerischem Index hantiere und dieser Typ sowieso als Array zurückgegeben wird. Vermutlich weil er nicht zu einem Objekt konvertiert werden kann.

edit: Mike war schneller.
edit2: Hab das mal von UR abgetrennt, da allgemein.
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Benutzeravatar
IMC
Mitglied
Beiträge: 658
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: json_decode (Userreminder, Extension Manager Plus und andere)

Beitrag von IMC »

Ich habe noch mal getestet.

Code: Alles auswählen

$json0 = json_encode(["eins"=>"eins","zwei"=>"zwei","drei"=>"drei"]);
$json1 = json_encode(["eins","zwei","drei"]);
var_dump(json_decode($json0));
var_dump(json_decode($json0, true));
var_dump(json_decode($json1));
var_dump(json_decode($json1, true));
Die Ausgabe:

Code: Alles auswählen

object(stdClass)#1 (3) {
  ["eins"]=>
  string(4) "eins"
  ["zwei"]=>
  string(4) "zwei"
  ["drei"]=>
  string(4) "drei"
}
array(3) {
  ["eins"]=>
  string(4) "eins"
  ["zwei"]=>
  string(4) "zwei"
  ["drei"]=>
  string(4) "drei"
}
array(3) {
  [0]=>
  string(4) "eins"
  [1]=>
  string(4) "zwei"
  [2]=>
  string(4) "drei"
}
array(3) {
  [0]=>
  string(4) "eins"
  [1]=>
  string(4) "zwei"
  [2]=>
  string(4) "drei"
}
Es ist so wie ihr es beschrieben habt. Wenn man das true bei einfachen Arrays setzt hat es keine negativen Auswirkungen.
Gruß, Thorsten
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2767
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: json_decode (Userreminder, Extension Manager Plus und andere)

Beitrag von LukeWCS »

nAbend Thorsten, wie üblich zur Nachtschicht. :D
IMC hat geschrieben: 06.01.2025 23:35 Die Ausgabe:
...
Es ist so wie ihr es beschrieben habt.
Jupp. Aber aufgrund deiner Überlegung habe ich mir die Doku der Funktion nochmal genauer angeschaut. Mein damaliger Entschluss bei einfachen Arrays den zweiten Parameter nicht zu setzen, war der, das ich bei einem normalen Array ja kein assoziatives Array brauche. Jetzt kommt das Aber: Bei PHP gibt es eigentlich keine "normalen" Arrays, sondern jeder Array Typ wird immer als Mapping abgebildet. Das sieht man auch prima an deinen Dumps bezüglich dem normalen Array, denn auch das ist ein Mapping, nur eben eines mit einem rein numerischen Schlüssel. Und soweit ich die Defaults der Funktion verstanden habe, liefert die Funktion immer ein Objekt zurück, wenn man nicht explizit etwas anderes definiert.
Wenn man das true bei einfachen Arrays setzt hat es keine negativen Auswirkungen.
Genau. Das heisst unterm Strich; korrekter/konsequenter wäre eigentlich die konstante/explizite Verwendung des zweiten Parameters mit true, wenn man kein Objekt benötigt, denn auch ein normales JSON kodiertes Array wird immer als Mapping (assoziatives Array) dekodiert.
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Antworten

Zurück zu „Extension Bastelstube“