Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [OOP]serialize e oggetti

    ciao a tutti,
    ho un pagina.php che costruisce un'oggetto con le sue proprietà e metodi tramite una funzione


    codice:
    function crea("dominio.it")
      {
      require("Class.php");//richiama il file con la costruizione della classe
      return $oggetto;
      }
    prima di trasferirmi alla pagina successiva (tramite post di un form) serializzo l'oggetto e lo salvo in una variabile di sessione $_SESSION["OBJ"].

    $obj = crea("pippo.it");
    $_SESSION["OBJ"] = serialize($obj);


    fino qua nessun problema...il problema è nella pagina dopo, dove per recuperare l'oggetto serializzato devo, prima includere il file con il costruttore della classe

    next.php

    <?
    require("Class.php");
    $dom = unserialize($_SESSION["OBJ"]);

    /*
    eseguo delle operazioni che variano il contenuto dell'oggetto e mi obbligano a ricrearlo.
    */
    reuiqre("filefunzioni.php");//dove risiede la funzione che cre l'oggetto!
    $obj = crea("pippo.it");
    header("Location: mostraoggetto.php");
    ?>

    qua il problema, perchè prima di unserialize devo includere il file con la definizione della classe, ma allo stesso tempo richiamo una funzione che anche al suo interno richiede il file con la defizione della classe e il php mi restituisce l'errore di doppia dichiarazione dell'oggetto!come posso fare?

  2. #2
    secondo me dovresti buttare tutto e riprogettare il codice

    con un minimo di progettazione ovviamente si aggirano questi require ciclici (se cosi si può dire)

  3. #3
    già fatto..basta creare l'oggeto solo dopo il location in modo che non ci siano ambiguità...però pensavo potesse esistere una qualche funzione che permettesse in caso di doppia dichiarazione di funzione, di rendere l'ultima quella master.

  4. #4
    Ciao,

    a cosa serve questa cosa?

    $obj = crea("pippo.it");
    $_SESSION["OBJ"] = serialize($obj);

    La sessione serializza e deserializza automaticamente gli oggetti e non c'è pericolo di perderli
    per favore NIENTE PVT TECNICI da sconosciuti

  5. #5
    questa crea l'oggetto
    $obj = crea("pippo.it");

    poi compatto tutto in una variabile di sessione....

    La sessione serializza e deserializza automaticamente gli oggetti e non c'è pericolo di perderli

    WAIT!..in base alle specifiche serialize mi serve a compattare l'oggetto in questione,ma se non lo dico in modo esplicito le sessioni non serializzano..o no?
    se è così non mi serve a nulla serializzare quando salvo in una variabile di sessione l'oggetto!

  6. #6
    Originariamente inviato da lbottoni
    se è così non mi serve a nulla serializzare quando salvo in una variabile di sessione l'oggetto!
    Infatti non ti serve a nulla, non stai passando l'oggetto via HTTP ma attraverso il sistema delle sessioni.

    Le sessioni serializzano le variabili, quindi anche gli oggetti, automaticamente
    per favore NIENTE PVT TECNICI da sconosciuti

  7. #7
    ok, faccio due test e poi confermo o smentisco che così lasciamo ai posteri la tua ottima postilla.

  8. #8
    Heller credo che ciò cha hai detto non sia corretto(ma non del tutto), ho fatto questa prova con due file php

    crea.php
    codice:
    <?
    require(class/function.php");
    session_start();
    $_SESSION["OBJ"] = CreateObj("pippo.it");
    echo $_SESSION["OBJ_DNS"]->DomainName;
    //viene stampato correttamente la proprietà dell'oggetto
    ?>
    
    
    clicca qui
    panel.php
    codice:
    session_start();
    //require("class/obj_dns.php");
    $x = $_SESSION["OBJ"];
    echo $x->DomainName;
    /*ho anche provato a non richiamare il file con il costruttore dell'oggetto, ma non funziona.
    */

    però se provo a stamapare la variabile di sessione $_SESSION["OBJ"] il php mi dice che è un oggetto, però non mi dà più le sue proprietà.

  9. #9
    crea.php
    codice:
    <?
    require(class/function.php");
    session_start();
    $_SESSION["OBJ"] = CreateObj("pippo.it");
    echo $_SESSION["OBJ"]->DomainName;
    //viene stampato correttamente la proprietà dell'oggetto
    ?>
    
    
    clicca qui
    panel.php
    codice:
    session_start();
    //require("class/obj_dns.php");
    $x = $_SESSION["OBJ"];
    echo $x->DomainName;
    /*ho anche provato a non richiamare il file con il costruttore dell'oggetto, ma non funziona.
    */
    così e scritto giusto, prima avevo scritto male il nome della variabile di sessione.

  10. #10
    credo che dovresti includere la classe ... se lui non sa che struttura ha è un po difficile che la possa deserializzare correttamente

    la devi includere prima del session_start

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.