Autor | Zpráva | ||
---|---|---|---|
abcdedcba Profil * |
#1 · Zasláno: 16. 10. 2010, 01:06:00
ahoj.
Pokud píšu kód v php tak mám pořád nutkání používat reference např. u tohoto: $this->funkce($pole); // funkce funkce přečte pole a vrátí nějaký výsledek automaticky bych psal function funkce(&$pole)... Ale nastudoval jsem si, že u php to nemá smysl protože se ve skutečnosti hodnota $pole nekopíruje, jen se na ni automaticky ukáže a pouze pokud bych ji upravoval tak dojde k fyzickému kopírování. Tím se mi ale naskýtá otázka kdy je vlastně vhodné v php reference používat? |
||
Majkl578 Profil |
#2 · Zasláno: 16. 10. 2010, 01:22:51 · Upravil/a: Majkl578
abcdedcba:
„Tím se mi ale naskýtá otázka kdy je vlastně vhodné v php reference používat?“ Když chceš hodnotu měnit referencí. :) Obsáhleji: Pokud měníš hodnotu referencí, rozdíl je v tom, že hodnotu nevracíš pomocí return, ale přímo ve funkci změníš hodnotu, tj. $foo = doSomethingOdd($foo) × doSomethingOdd($foo) . Praktický význam můžeš nalézt ve chvíli, kdy potřebuješ z volané funkce získat více údajů, např. kromě změněných dat i počet nahrazení řetězce apod. Příkladem budiž funkce preg_replace, která ve svém 5. parametru vrací počet nahrazení referencí.
„u php to nemá smysl protože se ve skutečnosti hodnota $pole nekopíruje, jen se na ni automaticky ukáže a pouze pokud bych ji upravoval tak dojde k fyzickému kopírování“ Opravdu je to tak. Zajišťuje to interní php typ zval Vysvětlím na příkladu: $a = 'foo'; //nastavení hodnoty $a debug_zval_dump($a); //"foo", refcount(2) $b = $a; //přiřazení hodnoty $a do $b debug_zval_dump($a); //"foo", refcount(3) - hodnota je interně přiřazená referencí debug_zval_dump($b); //"foo", refcount(3) - hodnota $b ukazuje na hodnotu $a $b = 'bar'; //změna hodnoty $b debug_zval_dump($a); //"foo", refcount(2) - hodnota $b se změnila, reference tedy nadále neexistuje debug_zval_dump($b); //"bar", refcount(2) - nová, nezávislá hodnota |
||
Časová prodleva: 14 let
|
0