Autor | Zpráva | ||
---|---|---|---|
4ever Profil |
#1 · Zasláno: 14. 12. 2011, 12:05:18 · Upravil/a: 4ever
Ahoj,
je možné zkrátit tento zápis? $w = ($what == 'effect') ? 'e' : 'c'; $ref =& $this->argLists->methodNames->$w; if ($this->type[$what]){ foreach($this->type[$what] as $level => $method){ $keyword = $ref[$method]; } } místo nefunkčního: $this->argLists->methodNames->$w[$method] používám proměnnou $ref. Když je podobných situací v kódu více, stává se nepřehledný. |
||
Nox Profil |
#2 · Zasláno: 14. 12. 2011, 12:13:39 · Upravil/a: Nox
radši použij nějaký editor s napovídáním (code completition), kód se většinou častěji čte než píše, raději to zapiš normálně a je to
pokud ale ty -> jsou vlastně __call / __get, tak to může kód urychlit a pak by to bylo ok (hlavně tím, že je to v cyklu) hlavně myslim že - to zhoršení je, protože to pojmenuješ nesmyslně $ref ... kdybys to pojmenoval podle toho, co to je, bylo by to o dost přehlednější navíc tady nemusíš používat referenci, pokud tomu neplánuješ měnit hodnotu (hodnota je po přiřazení kopírována teprve pokud se změní, jinak oba ukazují na stejnou hodnotu, viz phpfashion: černá magie optimalizace) |
||
4ever Profil |
#3 · Zasláno: 14. 12. 2011, 12:37:05 · Upravil/a: 4ever
Nox:
„radši použij nějaký editor s napovídáním (code completition)“ Tohle jsem nepochopil... Proč jsem použil referenci má dva důvody. Je to tam pro jistotu, kdyby se nejednalo o objekt. Často odkazuji buď na objekt nebo na vlastnost objektu, která je pole. A jelikož pole není objekt tak by zřejmě docházelo ke kopírování. Jelikož je to v metodě, která se často volá a dále pak uvnitř vnořených smyček, přijde mi vhodné použít referenci. Ten druhý důvod: stejný nebo velmi podobný název pro všechny reference, aby se tato reference dala snadno najít (zmáčknutí F3). Hlavně mi přijde zbytečný to pojmenovat podle toho co to je, když to vidíš (obvykle o jeden řádek výše): $ref =& $this->argLists->methodNames->$w; PS: Ten odkazovaný článek je na mě moc složitý, ale stejně raději ponechám =& . |
||
Nox Profil |
#4 · Zasláno: 14. 12. 2011, 15:33:08
4ever:
„Ten odkazovaný článek je na mě moc složitý, ale stejně raději ponechám =& .“ s tímhle přístupem asi nemá cenu abych odpovídal :) Článek jasně popisuje, že při prostém přiřazení se prostě nekopíruje, pokud nemícháš reference a přiřazení Přijde mi, že tímhle se spíš stává kód kryptičtějším, jestli máš všude $ref a pokaždé je to úplně něco jiného... Ještě pořád vlastně nevím, proč používáš tu referenci a proč to potřebuješ nějak krátit Celý ten kód je zvláštní, když v cyklu přiřazuješ do stejné proměnné pořád něco jiného ... je stejné, jako bys tam hned dal poslední položku (btw 'e' a 'c' znamená co? abys to věděl i za měsíc třeba) Jinak ... pokud potřebuješ něco krátit, tak to třeba dej celé do funkce/metody |
||
4ever Profil |
#5 · Zasláno: 14. 12. 2011, 18:46:16 · Upravil/a: 4ever
Nox:
„Ještě pořád vlastně nevím, proč používáš tu referenci a proč to potřebuješ nějak krátit“ To jsem psal v prvním příspěvku. Nemohu použít zápis $this->argLists->methodNames->$w[$method] Chci zpřístupnit vlastnost, která je uložená pod $this->argLists->methodNames->$w a jméno vlastnosti nese proměnná $method proto to chci zkrátit. Referenci používám proto, že jinak mi to dělá bordel a "zásobník" se mi přepíše nějakýma jinýma hodnotama co tam nemají být. To "e" a "c" si budu pamatovat protože to je stavebním kamenem té aplikace. Je to zkratka pro "effect" a "condition". |
||
Majkl578 Profil |
#6 · Zasláno: 14. 12. 2011, 19:25:20 · Upravil/a: Majkl578
4ever:
> místo nefunkčního: > > $this->argLists->methodNames->$w[$method]
Co je na tom nefunkčního? Jen to neumíš správně zapsat: // prototyp toho, co tam máš ty $argLists = new stdClass; $argLists->methodNames = new stdClass; $argLists->methodNames->foo = array('a' => 'b'); $w = 'foo'; $method = 'a'; var_dump($argLists->methodNames->{$w}[$method]); // b $argLists->methodNames->f .
Ten kód v [#1] se mi ani trochu nelíbí, je neprůhledný a zavání pokusem oslnit složitostí (navíc reference je zbytečná, jak už zmínil Nox). Proč používáš tak zřetězené volání? Není to jen chybný OO návrh? |
||
4ever Profil |
#7 · Zasláno: 14. 12. 2011, 22:09:02 · Upravil/a: 4ever
Majkl578:
„Mimochodem, i to co jsi poslal by "fungovalo" (ve smyslu, že by to nespadlo na parse erroru)“ Ale to já vím, funkční to je, špatně jsem se vyjádřil. Ale nelze to použít pro to, čeho jsem chtěl dosáhnout. „Ten kód v [#1] se mi ani trochu nelíbí, je neprůhledný a zavání pokusem oslnit složitostí (navíc reference je zbytečná, jak už zmínil Nox). Proč používáš tak zřetězené volání? Není to jen chybný OO návrh?“ Proto jsem založil toto vlákno, abych se dozvěděl jestli to jde a jak to udělat. Viz "Když je podobných situací v kódu více, stává se nepřehledný. " A opravdu nešlo o pokus oslnit složitostí, ale o pokus dozvědět se jak to zjednodušit. S tímto zápisem jsem se setkal poprvé, takže díky, je to skvělé řešení. |
||
Časová prodleva: 12 let
|
0