Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: & prima di qualcosa

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205

    & prima di qualcosa

    di una variabile.. o di una funzione
    a che serve?
    c'entra qualcosa con la @?

    &new qualcosa (&$var)

    dove trovo info su queste cose su php.net?

    grassie
    .

  2. #2
    $pippo = 'pluto';
    $paperino = &$pippo;

    // $paperino diventa alias di $pippo, non un' altra variabile ...

    $paperino = 'minnie';

    echo $pippo; // stampera' minnie



    serve a non sprecare inutilmente memoria con copie di copie di variabili, semplicemente alloca un nome alternativo che fara' riferimento allo steso indirizzo di memoria, senza creare quindi 2 stringhe differenti come ad esempio:

    $pippo = 'pluto';
    $paperino = $pippo;

    $paperino = 'minnie';
    echo $pippo; // stampera' pluto perche' paperino non era un suo riferimento ma una sua copia


    Ora questo puo' essere utile soprattutto quando hai a che fare con arrays, oggetti e tutti quei tipi di variabile consistenti che se copiati di continuo altro non fanno che rallentare ed appesantire il lavoro del server.


    in una funzione invece:
    codice:
    function echoString( &$string ) {
    	echo $string;
    }
    serve ad evitare di appesantire il lavoro di deleting in garbage collection perche' sebbene una variabile all' interno di una funzione sia valida solo al suo interno, quindi teoricamente "dimenticata" a funzione completata, ricevere $string piuttosto che &$string ricreerebbe comunque al suo interno una copia, aumentando la memoria utilizzata inutilmente ed appesantendo comunque il lavoro del server.

    NOTA BENE
    se utilizzi il riferimento & per parametri di funzione devi passare una variabile e non una stringa ....

    ESEMPIO:

    echoString( "ciao mondo" );

    dara' errore perche' &$string non avra' un riferimento orginario a cui appoggiarsi, percui dovrai usare una variabile ...

    $ciaoMondo = "ciao mondo";
    echoString( $ciaoMondo );

    non dara' errore ma avrai creato una variabile.

    Se non avessi messo la variabile per riferimento invece $string sarebbe stata, dentro la funzione, una copia di quella passata, oppure la crazione della stessa.

    ESEMPIO:
    codice:
    function echoString( $string ) {
    	echo $string;
    }
    
    echoString( "ciao mondo" ); // $string sara' creazione di variabile
    
    
    echoString( $ciaoMondo ); // $string sara' copia di ciaoMondo

    Secondo me ti conviene utilizzare sempre, dove e' possibile, i riferimenti a variabile, perche' male che vada, visto che o in un modo o in un altro una stringa o oggetto che sia viaggia con un riferimento ( che se non c'e' viene comunque creato ) puoi ovviare all' inconveniente di dover creare prima la variabile semplicemente usando una sintassi tipo:

    echoString( $myString = "ciao mondo" );

    creando e riferendo automaticamente il tutto alla variabile fuori funzione $myString.

    Spero di aver chiarito
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    aggiungo, come ulteriore chiarimento sul riferimento in funzione quanto segue:

    codice:
    function delString( &$string ) {
    	$string = 'deleted';
    }
    delString( $ciaoMondo = "ciao mondo" );
    
    echo $ciaoMondo;
    // scrivera' deleted
    
    ---------------------------------------
    
    function delString( $string ) {
    	$string = 'deleted';
    }
    delString( $ciaoMondo = "ciao mondo" );
    
    echo $ciaoMondo;
    // scrivera' ciao mondo e $string sara' gia' "dimenticata"
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Interessante sul punto, anche questo articolo

    http://www.zend.com/zend/art/ref-count.php#aliasing
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205
    Originariamente inviato da andr3a
    ...
    ci viene quasi quasi una pillola

    ho capito perfettamente il funzionamento di questi alias
    ho un paio di domande...

    come hai detto... può essere utile per gli array
    io per esempio.. in tutti i miei script.. uso memorizzare gli array _POST _GET ecc in un array con lo stesso nome.. solo perchè nella pagina mi è più comodo usare un nome diverso... è questo il caso in cui è utile usare questi alias?

    poi non ho afferrato una cosa dai tuoi esempi

    ad un certo punto scrivi:

    function echoString( $string ) {
    echo $string;
    }
    echoString( $ciaoMondo ); // $string sara' copia di ciaoMondo

    in questa parte non colgo l'utilizzo della &
    forse ti sei dimenticato di metterla...
    devo metterla quando definisco una funzione, cioè
    "function echoString( &$string ) {"
    o quando la utilizzo
    "echoString (&$variabile);"
    o sia nel primo che nel secondo?

    grazie 1000 andrea.. mi aspettavo una risposta striminzita perchè pensavo che servisse a poco.. invece

    gm.. se ho capito bene puoi creare un alias da solo una voce di un array... può essere utilissimo anche questo...
    .

  6. #6
    Originariamente inviato da IcedGlow
    io per esempio.. in tutti i miei script.. uso memorizzare gli array _POST _GET ecc in un array con lo stesso nome.. solo perchè nella pagina mi è più comodo usare un nome diverso... è questo il caso in cui è utile usare questi alias?
    si, riassegna con la & .. &$_POST["var"]; &$_GET["var"];
    inutile avere copia di ogni cosa inviata ...



    Originariamente inviato da IcedGlow
    poi non ho afferrato una cosa dai tuoi esempi

    ad un certo punto scrivi:

    function echoString( $string ) {
    echo $string;
    }
    echoString( $ciaoMondo ); // $string sara' copia di ciaoMondo

    in questa parte non colgo l'utilizzo della &
    infatti e' un esempio senza la e ... con la & non crea il riferimento se non c'e', senza si ... con la e modifica direttamente la variabile passata in funzione, senza ne crea una copia e poi viene messa in delete nella garbage collection
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205
    Originariamente inviato da andr3a
    si, riassegna con la & .. &$_POST["var"]; &$_GET["var"];
    inutile avere copia di ogni cosa inviata ...
    bene... e in termini di prestazioni questi alias quanto influiscono?

    Originariamente inviato da andr3a
    infatti e' un esempio senza la e ... con la & non crea il riferimento se non c'e', senza si ... con la e modifica direttamente la variabile passata in funzione, senza ne crea una copia e poi viene messa in delete nella garbage collection
    qui purtroppo non ho capito
    puoi farmi un esempio con la & per favore?

    ->

    devo metterla quando definisco una funzione, cioè
    "function echoString( &$string ) {"
    o quando la utilizzo
    "echoString (&$variabile);"
    o sia nel primo che nel secondo?
    .

  8. #8
    Originariamente inviato da IcedGlow
    bene... e in termini di prestazioni questi alias quanto influiscono?
    zero o ininfluente ...



    Originariamente inviato da IcedGlow
    devo metterla quando definisco una funzione, cioè
    "function echoString( &$string ) {"
    o quando la utilizzo
    "echoString (&$variabile);"
    o sia nel primo che nel secondo?
    in funzione, se passi la var con riferimento a se stessa non ha molto senso

    function echoString( &$string ) { }
    questa e' ok
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    205
    Originariamente inviato da andr3a
    zero o ininfluente ...
    potrebbe ifluire se volessi assegnare un alias anzichè una nuova variabile, ad un ogni indice di un array dato da una connessione ad un db?


    Originariamente inviato da andr3a
    in funzione, se passi la var con riferimento a se stessa non ha molto senso
    già.. anche io pensavo che funzionasse così.. ma mi ricordavo che la porzione di codice (causa di questo thread) ci fosse la & proprio quando veniva utilizzata la funzione

    aspetta adesso che ci penso era per richiamare una classe come ho scritto nel primo post...

    &new qualcosa (&$var)
    .

  10. #10
    Originariamente inviato da IcedGlow
    potrebbe ifluire se volessi assegnare un alias anzichè una nuova variabile, ad un ogni indice di un array dato da una connessione ad un db?
    dipende da quanti records tiri fuori dalla query, comunque influisce poco, lavora lo stack e non la HEAP



    Originariamente inviato da IcedGlow
    aspetta adesso che ci penso era per richiamare una classe come ho scritto nel primo post...

    &new qualcosa (&$var)
    $myVar = &new MyClass();
    non copia l' oggetto MyCLass, lo "appoggia" a $myVar;


    mentre scrivere

    $myVar = &new MyClass( &$myString );
    dovrebbe dare un deprecated perche' si accetta per riferimento ma non si passa per riferimento ( nel momento in cui tu passi $myString stai passando esattamente $myString, riferirla a se stessa non ha senso )

    Quindi e' corretto scrivere:
    $myVar = &new MyClass( $myString );


    stara' al costruttore di MyCLass accettare &$myString

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.