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![]()
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![]()
.
$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:
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.codice:function echoString( &$string ) { echo $string; }
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![]()
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"
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]
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...![]()
.
si, riassegna con la & .. &$_POST["var"]; &$_GET["var"];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?![]()
inutile avere copia di ogni cosa inviata ...
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 collectionOriginariamente 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 &
bene... e in termini di prestazioni questi alias quanto influiscono?Originariamente inviato da andr3a
si, riassegna con la & .. &$_POST["var"]; &$_GET["var"];
inutile avere copia di ogni cosa inviata ...
qui purtroppo non ho capitoOriginariamente 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
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?
.
zero o ininfluente ...Originariamente inviato da IcedGlow
bene... e in termini di prestazioni questi alias quanto influiscono?
in funzione, se passi la var con riferimento a se stessa non ha molto sensoOriginariamente 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?![]()
![]()
function echoString( &$string ) { }
questa e' ok![]()
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
zero o ininfluente ...
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 funzioneOriginariamente inviato da andr3a
in funzione, se passi la var con riferimento a se stessa non ha molto senso![]()
![]()
aspetta adesso che ci penso era per richiamare una classe come ho scritto nel primo post...
&new qualcosa (&$var)
.
dipende da quanti records tiri fuori dalla query, comunque influisce poco, lavora lo stack e non la HEAPOriginariamente 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?![]()
$myVar = &new MyClass();Originariamente inviato da IcedGlow
aspetta adesso che ci penso era per richiamare una classe come ho scritto nel primo post...
&new qualcosa (&$var)
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
![]()