Autor | Zpráva | ||
---|---|---|---|
Public Profil |
Prečo sa v PHP kóde niekedy používa znak & ?
Napr.: <? class Data { funkcia &Data($Data) { $this->Recs[] &= Load($Data); } } |
||
Alphard Profil |
#2 · Zasláno: 24. 2. 2012, 16:01:28
U přiřazení se předává reference, ale před názvem metody jsem to teda ještě neviděl.
|
||
Tori Profil |
#3 · Zasláno: 24. 2. 2012, 16:16:15
Public:
& před názvem funkce/metody viz http://www.php.net/manual/en/language.references.return.php (viděla jsem to asi v Nette\Object, nicméně tomu nerozumím, takže jen odkazuji na manuál) |
||
Alphard Profil |
#4 · Zasláno: 24. 2. 2012, 16:23:26
Tori:
Dík, když to vidím v manuálu, tak si začínám vybavovat, že jsem to viděl, ale snad nikdy nepoužil. Dostuduji. Ještě dva odkazy vysvětlující klasické reference, pamětníci znají, je to z doby, kdy jsem zakládal svůj účet na této diskusi :-) http://latrine.dgx.cz/php-puvab-optimalizace-rychlosti http://latrine.dgx.cz/php-cerna-magie-optimalizace |
||
SeparateSK Profil |
Má to tú istú úlohu ako v C++.
Odkazuje to na dané hodnoty, ktoré do toho vstúpia napr: <?php function zmen(& $a,& $b,& $c){ $a+=1; $b+=2; $c+=3; } $x=1; $y=2; $z=3; zmen($x,$y,$z); echo "X: $x<br>Y: $y<br>Z: $z" ?> Pôvodné X je 1, pôvodné Y je 2 , a pôvodné Z je 3. Do funkcie vstúpia tieto 3 hodnoty s odkazom na to že $a je vlastne $x... Ak sa zmení $a, tak sa zmení aj $x, lebo & $a odkazuje na $x www.cplusplus.com/doc/tutorial/functions2/ síce to neni PHP ale je to vysvetlenie v C++ |
||
Alphard Profil |
#6 · Zasláno: 24. 2. 2012, 16:33:09
Ještě jsem si vzpomněl na http://people.csail.mit.edu/pgbovine/python/tutor.html#mode=visualize není to pro PHP, ale hračka pěkná.
|
||
Keeehi Profil |
#7 · Zasláno: 24. 2. 2012, 17:59:39
Pokud to chápu správně, tak je to to samé, jako když v Cčku chceme mít jako návratový typ ukazatel na něco. V Cčku se v definici funkce za datový typ napíše hvězdička. Jelikož v PHP datové typy nespecifikujeme, píše se ampersand před název funkce.
Kdyžtak mě někdo opravte. |
||
AoJ.HgTS Profil |
#8 · Zasláno: 25. 2. 2012, 12:19:12
[#7] Keeehi
ano, v podstatě to tak je. Rozdíl je pouze v tom, že použití & nezpůsobí zkopírování obsahu proměnné v paměti, ale pouze na obsah odkazuje. V PHP při předání jakkékoliv proměnné (string, int, array atd.) se jeho obsah zkopíruje a defacto se vytvoří nová proměnná, jestli proměnná obsahuje velké množství dat (načtený soubor, hodně řádku z databáze) zbytečně se obsah znovu a znovu kopíruje a zpomaluje to aplikaci. Jestli z proměnou potřebujete pouze číst, tj. zobrazit její obsah, mělo by se vždy používat &. S úpravami je to složitější, jestli dostaneme proměnnou přes & a nějak jí změníme, zmení se u na původním místě. |
||
Davex Profil |
#9 · Zasláno: 25. 2. 2012, 12:33:37
AoJ.HgTS:
„zbytečně se obsah znovu a znovu kopíruje a zpomaluje to aplikaci“ Ne, obsah proměnné se zkopíruje až při první změně obsahu, takže se nedá říct, že každé přiřazení do proměnné zpomaluje. Viz vysvětlení na odkazech ve [#4]. „Jestli z proměnou potřebujete pouze číst, tj. zobrazit její obsah, mělo by se vždy používat &.“ Z předchozího tedy vyplývá, že toto není pravda. (PHP nepracuje stejně jako C/C++) |
||
Časová prodleva: 11 let
|
0