Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    428

    [php] puntatore alla memoria?

    sera,
    premesso che sto lavorando con php 4.x
    Ma php quando copi il puntatore di memoria di un oggetto, lui ne effettua una copia
    Mi spiego meglio, ho un oggetto $database, che lo istanzio creando semplicemente semplicemente passandogli la configurazione del database (nome utente, password..etc..etc...). poi successivamente effettuo la connessione.
    Se scrivo una cosa del genere:
    codice:
    $database = new Database(..configurazione..);
    $oggetto = new NuovoOggetto($database);
    $database->connect();
    $oggetto->usaDb();
    Mi da errore quando vado ad usare il db.
    Se invece scrivo questo:
    codice:
    $database = new Database(..configurazione..);
    $database->connect();
    $oggetto = new NuovoOggetto($database);
    $oggetto->usaDb
    Possibile che quel passaggio del parametro $database lo copia e non mantiene un puntantore di memoria a quel preciso oggetto?
    Capisco la gestione scadente di php 4 delle classi e oggetti, ma è pessima fino a questo punto!? VVoVe:


  2. #2
    Prova
    $oggetto = new NuovoOggetto(&$database);
    in questo modo passi il riferimento dell'oggetto

    ciao

  3. #3
    Originariamente inviato da bubu77
    Prova
    $oggetto = new NuovoOggetto(&$database);
    è deprecato (e sconsigliato)

    Meglio che modifichi la dichiarazione della funzione per ricevere il parametro per riferimento.

    [supersaibal]
    allow_call_time_pass_reference - boolean
    Whether to enable the ability to force arguments to be passed by reference at function call time. This method is deprecated and is likely to be unsupported in future versions of PHP/Zend. The encouraged method of specifying which arguments should be passed by reference is in the function declaration. You're encouraged to try and turn this option Off and make sure your scripts work properly with it in order to ensure they will work with future versions of the language (you will receive a warning each time you use this feature, and the argument will be passed by value instead of by reference).

    Passing arguments by reference at function call time was deprecated for code cleanliness reason. Function can modify its argument in undocumented way if it didn't declared that the argument is passed by reference. To prevent side-effects it's better to specify which arguments are passed by reference in function declaration only.[/supersaibal]
    Per Gnegno, i riferimenti PHP non sono puntatori, sono più semplicemente dei nomi "alias" per la variabile.
    Infatti se fai unset() su un riferimento elimini solo l'alias, non la variabile da lui riferita.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    428
    Originariamente inviato da skidx
    Meglio che modifichi la dichiarazione della funzione per ricevere il parametro per riferimento.
    in che senso?

    codice:
    class NuovoOggetto {
     function NuovoOggetto(&$database) {
      ..
     }
    }
    
    e poi dopo
    $oggetto = new NuovoOggetto($database);

  5. #5
    Originariamente inviato da Gnegno
    in che senso?

    codice:
    class NuovoOggetto {
     function NuovoOggetto(&$database) {
      ..
     }
    }
    
    e poi dopo
    $oggetto = new NuovoOggetto($database);
    Esatto.

  6. #6
    Originariamente inviato da skidx
    è deprecato (e sconsigliato)
    E' vero!
    Solo che con la mia memoria del menga non mi ricordo mai quale dei due sistemi è deprecato.
    Sistematicamente ricevo errore in fase di sviluppo con error_reporting su e_all e poi correggo

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.