Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    e' possibile ottenere l'indirizzo fisico di una variabile php?

    come da titolo

    e' possibile leggere l'indirizzo fisico di una variabile php?

    bisognerebbe trovare il modo di simulare i puntatori

    la mia è solo una curiosità per chiarire alcuni comportamenti

    esempio
    codice:
    function & getByRef()
    {
      $myvar = "ciao";
      return $myvar;
    }
    $var = getByRef();
    
    var_dump($var);//ciao
    $var dovrebbe essere null infatti lo scope di $myvar è la funzione all'uscita della quale non dovrebbe essere possibile accedere , dovrebbe essere distrutta
    semplicità ... al sol nominarla sembra svanire

  2. #2
    La funzione getByRef() restituisce i valore di $myvar per cui tu assegni a $var il valore contenuto in $myvar.
    Non ci vedo nulla di strano nel comportamento del tuo codice.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    grazie per la risposta

    Secondo me è strano, credo che in un altro linguaggio non funzionerebbe

    getByRef è stata dichiarata per restituire un riferimento ( & ) non il valore

    function & getByRef()

    quindi, a meno che non sto straparlando, le cose possibili sono 2

    1) PHP, coerentemente alla sua mission di linguaggio facile, di sua iniziativa fa una copia fisica della variabile

    2) viene passato il riferimento ma il valore rimane accessibile anche fuori dallo scope, nel qual caso mi domando se è un comportamento affidabile o se c'è il rischio che un garbage collector possa intervenire durante l'esecuzione della script


    in ogni caso questo ed altri dubbi si potrebbero risolvere se si potesse acedere all'inidirizzo fisico delle variabili
    semplicità ... al sol nominarla sembra svanire

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Non so come si comporta esattamente PHP in questa occasione, ma tu sai che un garbage collector libera dello spazio nel momento in cui
    1) Occorre spazio
    2) Non ci sono più riferimenti ad una certa locazione di memoria

    Da barvo linguaggio di alto livello, l'istruzione return fa più di quel che sembra. Essendo la funzione dichiarata come &nomeFunzione, il return salva nello stack il riferimento al valore di ritorno. Quindi sebbene myVar non esista più, un riferimento alla locazione esiste ancora. Il chiamante estrae i valori dallo stack al termine dell'esecuzione della funzione e se utilizzi

    $var = &getByRef();

    $var è un ulteriore riferimento quindi non può andare in garbage collection. Il manuale è alquanto evasivo sulla forma

    $var = getByRef();

    probabilemnte copia il valore e non il riferimento.
    Comunque il risultato che ottieni è quello atteso.

    Detto questo PHP non ha puntatori, quindi non puoi conoscere l'indirizzo fisico di una locazione di memoria. Puoi solo far si che due o più variabili facciano riferimento alla stessa locazione.

    http://www.php.net/manual/en/languag...ces.return.php
    o più in generale
    http://www.php.net/manual/en/language.references.php

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    il principio dovrebbe essere che se il return è su una variabile non globale restituisce comunque solo il valore, altrimenti restituisce il riferimento, infatti se fai

    Codice PHP:

    function & getByRef(){
        
        
    $myvar "ciao";
        return 
    $myvar;
    }
    $var = & getByRef();

    $myvar "Pippo";

    var_dump($var); // stamperà ciao 
    lo stesso codice aggiungendo solo la dichiarazione della variabile come globale funzionerà come riferimento

    Codice PHP:
    $myvar "";// anche se non è indispensabile dichiararla prima
    function & getByRef(){
        global 
    $myvar;
        
    $myvar "ciao";
        return 
    $myvar;
    }
    $var = & getByRef();

    $myvar "Pippo";

    var_dump($var); // stamperà Pippo 
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  6. #6
    Siamo tutti daccordo, anche io , che la cosa piu probabile è che venga copiato il vaolre della stringa

    Comunque questa era solo una delle cose che volevo verificare e nemmeno la piu interessante

    ritornare un riferimento ad una variabile, oggetto o primitiva o stringa, creata localmente è un errore concettuale di programmazione che in altri linguaggi meno permissivi non sarebbe possibile

    tra le due sono piu propenso a credere che php si accorge della boiata e rimedia automaticamente senza dirtelo,

    copia il riferimento, se oggetto, copia il valore se primitivo o stringa

    senza potere accedere all'indirizzo fisico non è possibile esserne certi



    bye e grazie per le risposte
    semplicità ... al sol nominarla sembra svanire

  7. #7
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Originariamente inviato da biagiopas
    ritornare un riferimento ad una variabile, oggetto o primitiva o stringa, creata localmente è un errore concettuale di programmazione che in altri linguaggi meno permissivi non sarebbe possibile

    tra le due sono piu propenso a credere che php si accorge della boiata e rimedia automaticamente senza dirtelo,
    sono daccordo con te, aggiungerei solo che questo comportamento è abbastanza in linea con le 'politiche' di PHP sulle variabili, ad esempio in php puoi permetterti di fare cose del tipo:

    Codice PHP:
    $var1 "3"// con virgolette quindi stringa

    $var2 "5.2" $var1// sommo una stringa a una variabile stringa ... e ottengo un float!!
    // anche in questo caso php si accorge della boiata e rimedia 
    che su altri linguaggi sarebbero assurde, ma alla fine il fatto che php sia molto poco tipizzato forse è anche la ragione della sua diffusione, è decisamente più facile per chi inizia a programmare buttarsi su un linguaggio come php piuttosto che buttarsi su un linguaggio fortemente tipizzato.

    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

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.