Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 5. 2. 2014, 13:15:10
Lze nějak jednoduše zkopírovat celé pole do jiné proměnné?
Tzn. když chci celou proměnnou $_POST mít například v proměnné $array . Jde to nějak jednoduše?
|
||
Joker Profil |
#2 · Zasláno: 5. 2. 2014, 13:16:12
quatzael:
„Jde to nějak jednoduše?“ Ano, stejně jako u jakékoliv jiné proměnné: Operátorem přiřazení. $array = $_POST; |
||
quatzael Profil |
#3 · Zasláno: 5. 2. 2014, 13:22:55
Joker:
Aha. Tak to je skvělý. Já jsem myslel, že tam musí být třeba aspoň ty hranatý závorky nebo tak něco. Díky. |
||
juriad Profil |
#4 · Zasláno: 5. 2. 2014, 13:50:53
quatzael:
Hranaté závorky jsou také operátor; vybere jeden prvek z pole. |
||
janbarasek Profil |
#5 · Zasláno: 5. 2. 2014, 14:07:53
Jenom by mě zajímalo, k čemu to je dobré. Vždyť se na tu hodnotu můžeš kdykoli zeptat pomocí $_POST['...']; a víc neřešit, ta hodnota se zaručeně neztratí a další proměnná je zbytečná komplikace co se přehlednoti týče, navíc je to další místo v paměti.
Načítání do pomocného pole se hodí velice vzácně (snad jenom když je chceš nějak seřadit nebo změnit). |
||
quatzael Profil |
#6 · Zasláno: 5. 2. 2014, 14:17:05
juriad:
Já jsem myslel něco takovýho: $array[]
janbarasek: „Načítání do pomocného pole se hodí velice vzácně (snad jenom když je chceš nějak seřadit nebo změnit).“ No něco takovýho, torchu to profiltrovat apod.. Jenom jako duplicitní proměnnou to samozřejmě nepotřebuju. |
||
Fisir Profil |
#7 · Zasláno: 5. 2. 2014, 17:33:03
Reaguji na janbaraska:
„je to další místo v paměti“ Pokud si to správně pamatuji, tak pokud se obsah původní a nové proměnné nijak nezměnil, ta nová jen odkazuje na tu původní a v paměti tedy téměř žádné místo navíc nezabírá. |
||
Radek9 Profil |
#8 · Zasláno: 6. 2. 2014, 09:45:31
Fisir:
„ta nová jen odkazuje na tu původní“ To by se stalo, pokud bys předal adresu: $array1 = array(1, 2, 3); $array2 = &$array1; $array2[0] = 4; echo $array1[0]; // vypíše 4 Pokud však použiješ pouhé předání proměnné, pole se zkopíruje. Stejně jako jakákoli jiná primitivní hodnota. Nekopírují se pouze objekty. |
||
Alphard Profil |
#9 · Zasláno: 6. 2. 2014, 10:35:17
Radek9:
Nechce se mi teď moc zabíhat do detailů, ale v principu má [#7] Fisir pravdu. Práce s proměnnými je interně implementována pomocí několika struktur, PHP název proměnné a ostatní data jsou ukládány odděleně. Název proměnné je v tabulce symbolů a odkazuje se na zbytek uložený ve struktuře zval , kde je mj. refcount , tj. počet PHP proměnných, které se na tuto hodnotu odkazují.
Klasické reference na úrovni PHP, o kterých mluvíš, jsou něco jiného, ty jsou implementovány pomocí položky is_ref .
Trochu jsme to zmínili v Základní kurz VI. – Proměnné. |
||
Joker Profil |
janbarasek:
„Jenom by mě zajímalo, k čemu to je dobré.“ Většinou to není potřeba, ale zrovna kdybych z nějakého důvodu potřeboval nějak manipulovat celým POST polem, asi by bylo lepší si udělat jeho kopii. Samotné $_POST (resp. všechna superglobální pole) bych používal jen pro čtení. Radek9: „Pokud však použiješ pouhé předání proměnné, pole se zkopíruje. Stejně jako jakákoli jiná primitivní hodnota. Nekopírují se pouze objekty.“ Takhle to podle mě není. PHP používá strategii zvanou copy on write. Čili přiřazení hodnoty ve skutečnosti nevytvoří kopii té hodnoty v paměti. Ta se vytvoří až ve chvíli, kdy se jedna z těch hodnot změní. ad Alphard: Možná by bylo fajn do pokročilejší části přidat nějaký článek ve stylu „Proměnné pro pokročilé“, který by se tím zabýval. Ale vzhledem k tomu v jakém stavu jsou zatím články je to asi spíš takový plán pro další pětiletku :-) |
||
Časová prodleva: 10 let
|
0