Php több szintes JSON generálása osztályokból
2018-06-29T06:13:38+02:00
2018-06-29T15:28:11+02:00
2022-08-18T21:40:37+02:00
GZolee79
Sziasztok!

A következő problémát eddig nem sikerült megoldanom. Ebben kérném a segítségetek:

Adott két PHP osztályom, ahol az egyik osztály mezője a másik osztály. Azt szeretném elérni, hogy több szintes JSON fájlként jelenjen meg.
A tesztelésre Firefox Developert használok, mert ez szépen megjeleníti a JSON struktúráját.

Ezek az osztályok:

class cim { private $megye; private $telepules; private $ir_szam; private $utca; private $hazszam; //--------------PROPERTIES----------------------- public function set_megye($new_megye) { $this->megye=$new_megye; } public function get_megye() { return $this->megye; } //------------------------------------------------- public function set_telepules($new_telepules) { $this->telepules=$new_telepules; } public function get_telepules() { return $this->telepules; } //------------------------------------------------- public function set_ir_szam($new_ir_szam) { $this->ir_szam=$new_ir_szam; } public function get_ir_szam() { return $this->ir_szam; } //--------------------------------------------------- public function set_utca($new_utca) { $this->utca=$new_utca; } public function get_utca() { return $this->utca; } //---------------------------------------------------- public function set_hazszam($new_hazszam) { $this->hazszam=$new_hazszam; } public function get_hazszam() { return $this->hazszam; } //--------------------------------------------------- public function expose() { return get_object_vars($this); } //---------------------------------------------------- } class dolgozo { private $torsszam; private $vezetek_nev; private $keresztnev; private $szul_hely; private $szul_datum; private $lakcim; private $TAJ_szam; private $felvitel_datum; private $teruleti_kod; private $beosztas; private $feor; private $kh_kod; //------------------------------------------------ public function set_torzsszam($new_torzsszam) { $this->torsszam=$new_torzsszam; } public function get_torzsszam() { return $this->torsszam; } //----------------------------------------------- public function set_vezetek_nev($new_vezetek_nev) { $this->vezetek_nev=$new_vezetek_nev; } public function get_vezetek_nev() { return $this->vezetek_nev; } //------------------------------------------------ public function set_keresztnev($new_keresztnev) { $this->keresztnev=$new_keresztnev; } public function get_keresztnev() { return $this->keresztnev; } //---------------------------------------------- public function set_szul_hely($new_szul_hely) { $this->szul_hely=$new_szul_hely; } public function get_szul_hely() { return $this->szul_hely; } //------------------------------------------------- public function set_szul_datum($new_szul_datum) { $this->szul_datum=$new_szul_datum; } public function get_szul_datum() { return $this->szul_datum; } //------------------------------------------------- public function set_lakcim($new_megye, $new_telepules, $new_ir_szam, $new_utca, $new_hazszam) { $lakcim = new cim(); $lakcim->set_megye($new_megye); $lakcim->set_ir_szam($new_ir_szam); $lakcim->set_telepules($new_telepules); $lakcim->set_utca($new_utca); $lakcim->set_hazszam($new_hazszam); $this->lakcim = $lakcim; } public function get_lakcim() { return $this->lakcim; } //------------------------------------------------ public function set_TAJ_szam($new_TAJ_szam) { $this->TAJ_szam=$new_TAJ_szam; } public function get_TAJ_szam() { return $this->TAJ_szam; } //--------------------------------------------------- public function set_felvitel_datum($new_felvitel_datum) { $this->felvitel_datum = $new_felvitel_datum; } public function get_felvitel_datum() { return $this->felvitel_datum; } //------------------------------------------------- public function set_teruleti_kod($new_teruleti_kod) { $this->terulet_kod = $new_teruleti_kod; } public function get_teruleti_kod() { return $this->teruleti_kod; } //------------------------------------------------ public function set_beosztas($new_beosztas) { $this->beosztas=$new_beosztas; } public function get_beosztas() { return $this->beosztas; } //--------------------------------------------------------- public function set_feor($new_feor) { $this->feor = $new_feor; } public function get_feor() { return $this->feor; } //------------------------------------------------------- public function set_kh_kod($new_kh_kod) { $this->kh_kod = $new_kh_kod; } public function get_kh_kod() { return $this->kh_kod; } public function expose() { return get_object_vars($this); } }
És így töltöm fel és íratom ki.

header('Content-type: application/json; charset=utf-8; Content-Language: content=hu-hu'); require_once('scripts/phpscripts/class_lib.php'); $dolgozo = new dolgozo(); $dolgozo->set_torzsszam(4000); $dolgozo->set_vezetek_nev('Minden'); $dolgozo->set_keresztnev('Áron'); $dolgozo->set_szul_hely('Hobbitfalva'); $dolgozo->set_szul_datum('1993-10-13'); $dolgozo->set_lakcim('A megye', 'Hobbitfalva', 4321, 'Alagsor utca', '1'); $dolgozo->set_TAJ_szam('333 777 888'); $dolgozo->set_felvitel_datum('2018-06-28'); $dolgozo->set_teruleti_kod('pénzügy'); $dolgozo->set_beosztas('Rendszergazda'); $dolgozo->set_feor(0); $dolgozo->set_kh_kod(0); echo json_encode($dolgozo->expose());
Ez a lakcím kivételével, ami a beágyazott osztály lenne szépen meg is jelenik.
Csatoltam az eredményt.
Az egyik kérdés az lenne, hogy a teruleti_kod miért jelenik meg kétszer.
A másik pedig, hogy hogyan tudnám kiíratni a lakcímet a kapcsos zárójelek közé a lakcím után.

Előre is köszi, a segítséget, :)
Bocs, ha kicsit hosszú a kód...

Üdv:
Z.
Mutasd a teljes hozzászólást!
Csatolt állomány
Az egyik "teruleti_kod" a masik "terulet_kod".

Masik dolog:

public function set_lakcim($new_megye, $new_telepules, $new_ir_szam, $new_utca, $new_hazszam) { $lakcim = new cim(); $lakcim->set_megye($new_megye); $lakcim->set_ir_szam($new_ir_szam); $lakcim->set_telepules($new_telepules); $lakcim->set_utca($new_utca); $lakcim->set_hazszam($new_hazszam); $this->lakcim = $lakcim; $this->lakcim = $lakcim -> expose(); }
Mutasd a teljes hozzászólást!

  • Szerintem, ha ezeket a változókat így állítod be, akkor látszani fog a lakcím:

    class cim{ public $megye; public $telepules; public $ir_szam; public $utca; public $hazszam; ...
    Mutasd a teljes hozzászólást!
  • Az egyik "teruleti_kod" a masik "terulet_kod".

    Masik dolog:

    public function set_lakcim($new_megye, $new_telepules, $new_ir_szam, $new_utca, $new_hazszam) { $lakcim = new cim(); $lakcim->set_megye($new_megye); $lakcim->set_ir_szam($new_ir_szam); $lakcim->set_telepules($new_telepules); $lakcim->set_utca($new_utca); $lakcim->set_hazszam($new_hazszam); $this->lakcim = $lakcim; $this->lakcim = $lakcim -> expose(); }
    Mutasd a teljes hozzászólást!
  • Ez így tényleg működik! Viszont akkor elvész a propertik lényege, hogy ellenőrzött módon lehessen  a változóknak értéket adni. Esetleg van rá mód, hogy private-ként is megjeleníthetőek legyenek?

    Arra esetleg nem jöttél rá, hogy miért van a területi kódból 2 a megjelenítésnél ? :)
    Mutasd a teljes hozzászólást!
  • Igen, igazad van a prorpertikkel, ezen molyolok és is, a másikat még nem találtam meg ...
    Mutasd a teljes hozzászólást!
  • Es meg egy: Chrome JSON Formatter
    Mutasd a teljes hozzászólást!
  • Maradhat private nem kell publikusra allitani. Es amit irtam korabban, beallitasz egy terulet_kod-ot

    $this -> terulet_kod = $new_teruleti_kod;
    utana pedig kiiratod a teruleti_kod-ot:

    return $this -> teruleti_kod;
    A ketto kozott egy i betu a kulonbseg.
    Mutasd a teljes hozzászólást!
  • Köszi! Ez még jól jöhet! 
    Mutasd a teljes hozzászólást!
  • public function set_vezetek_nev($new_vezetek_nev)
    Az ilyenektől nem fáj a fejed?
    Mutasd a teljes hozzászólást!
  • Bocsi, Nem vettem észre a korábbi hozzászólásodat! 
    Átfutotta a szemem :)
    Mutasd a teljes hozzászólást!
  • Kicsit faragtam a kódodon:

    class cim { private $cim = array(); function __construct($new_megye, $new_telepules,$new_ir_szam, $new_utca,$new_hazszam){ array_push($this->cim,$new_megye); array_push($this->cim,$new_telepules); array_push($this->cim,$new_ir_szam); array_push($this->cim,$new_utca); array_push($this->cim,$new_hazszam); } function cim_beallit(){ return $this ->cim; } } class dolgozo { private $torsszam; private $vezetek_nev; private $keresztnev; private $szul_hely; private $szul_datum; private $lakcim = array(); private $TAJ_szam; private $felvitel_datum; private $teruleti_kod; private $beosztas; private $feor; private $kh_kod; //------------------------------------------------ public function set_torzsszam($new_torzsszam) { $this->torsszam=$new_torzsszam; } public function get_torzsszam() { return $this->torsszam; } //----------------------------------------------- public function set_vezetek_nev($new_vezetek_nev) { $this->vezetek_nev=$new_vezetek_nev; } public function get_vezetek_nev() { return $this->vezetek_nev; } //------------------------------------------------ public function set_keresztnev($new_keresztnev) { $this->keresztnev=$new_keresztnev; } public function get_keresztnev() { return $this->keresztnev; } //---------------------------------------------- public function set_szul_hely($new_szul_hely) { $this->szul_hely=$new_szul_hely; } public function get_szul_hely() { return $this->szul_hely; } //------------------------------------------------- public function set_szul_datum($new_szul_datum) { $this->szul_datum=$new_szul_datum; } public function get_szul_datum() { return $this->szul_datum; } //------------------------------------------------- public function set_lakcim($new_megye, $new_telepules, $new_ir_szam, $new_utca, $new_hazszam) { $lakcim1 = new cim($new_megye,$new_ir_szam,$new_telepules,$new_utca,$new_hazszam); $this->lakcim = $lakcim1->cim_beallit(); } public function get_lakcim() { return $this->lakcim; } //------------------------------------------------ public function set_TAJ_szam($new_TAJ_szam) { $this->TAJ_szam=$new_TAJ_szam; } public function get_TAJ_szam() { return $this->TAJ_szam; } //--------------------------------------------------- public function set_felvitel_datum($new_felvitel_datum) { $this->felvitel_datum = $new_felvitel_datum; } public function get_felvitel_datum() { return $this->felvitel_datum; } //------------------------------------------------- public function set_teruleti_kod($new_teruleti_kod) { $this->terulet_kodi = $new_teruleti_kod; } public function get_teruleti_kod() { return $this->teruleti_kod; } //------------------------------------------------ public function set_beosztas($new_beosztas) { $this->beosztas=$new_beosztas; } public function get_beosztas() { return $this->beosztas; } //--------------------------------------------------------- public function set_feor($new_feor) { $this->feor = $new_feor; } public function get_feor() { return $this->feor; } //------------------------------------------------------- public function set_kh_kod($new_kh_kod) { $this->kh_kod = $new_kh_kod; } public function get_kh_kod() { return $this->kh_kod; } public function expose() { return get_object_vars($this); } }
    Mutasd a teljes hozzászólást!
  • Igazából ezt a megoldást is a Google-ből lestem. 
    Lehet fájnia kellene, de csak most kezdtem el használni a PHP objektum orientált részét.

    Kifejtenéd bővebben, hogy mi a gond vele :) ?
    Köszi!
    Mutasd a teljes hozzászólást!
  • Köszi!

    Igen, azt az egy "i" betűt nem szúrtam ki, pedig sokat számít 
    Működik a dolog. Tiéd a pont!

    nemetm! 
    A te megoldásod is jó, (köszi) :) de V3n0m előbb írta. 

    Z.
    Mutasd a teljes hozzászólást!
  • Egyik, hogy a PHP-ben is vannak getterek, setterek, azokat is lehetne használni saját függvények helyett. A legfőbb gondom vele, hogy keverednek a magyar és angol szavak, akár függvény vagy változó nevén belül is, amitől szvsz teljesen használhatatlanná válik a kód.
    Mutasd a teljes hozzászólást!
  • Igen,  ebben az angol magyar keveredésben igazad van.  Én is gondoltam rá, hogy rendbe kellene tenni. 

    A PHP-ben lévő getteket és setteket meg nem ismerem. Ezeket találtam meg. 
    Ha ismerem biztos azokat használom.  
    Utána fogok nézni. 
    Köszi az észrevételt! 
    Üdv:
    Z.
    Mutasd a teljes hozzászólást!
abcd