Autor | Zpráva | ||
---|---|---|---|
henz Profil * |
Zdravím, na campu jsem měl php 5, a toto mi fungovalo normálně:
$muj_OBJ = (object) []; while ($zbozi= $stmt->fetch(PDO::FETCH_ASSOC)) { $muj_OBJ->$['nazev'] = $zbozi['pocet']; } Nevíte co s tím? henz: mám tam malý překlep v kodu á to být samozřejmě takto: $muj_OBJ = (object) []; while ($zbozi= $stmt->fetch(PDO::FETCH_ASSOC)) { $muj_OBJ->$zbozi['nazev'] = $zbozi['pocet']; } už vím, stačí tam přidat závorky $muj_OBJ->{$zbozi['nazev']} = $zbozi['pocet']; špatně sem googlil |
||
Joker Profil |
#2 · Zasláno: 20. 10. 2018, 12:59:33
A k čemu tam ten anonymní objekt je?
Vypadá to, že chcete v podstatě získat pole, proč nepoužít prostě array? Takhle to bude složitější a (byť asi neznatelně) pomalejší a výhody tam nevidím. |
||
henz Profil * |
Joker:
tim anonymním objektem myslíš $muj_OBJ? Dával jsem to jako příklad, ve skutečnosti nevytahuju zboží, ale nastavení (počet článků na stránků, počet komentářů zobrazených v článků na jednu stránku, a další věci). Jde jen čistě o přehledost abych se v tom dobře vyznal a neměl v tom guláš. Ale opravdu je tenhle proces tak pomalý že bych se tomu měl vyhnout? nenapdá mě jinak možnost jak bych to mohl udělat. To bych musel napsat fetchAll, a potom bych to psal takto ($settings namísto $zbozi) $settings[1]->pocet, ale co je to zrovna na druhím místě si nebudu pamatovat. Jak by jsi to udělal ty? a nebo to nezapisovat do databáze ale do souboru php nebo jsi tim anonymním objektem myslel tohle? (object) [] |
||
Joker Profil |
#4 · Zasláno: 20. 10. 2018, 16:13:04
henz:
„nenapdá mě jinak možnost jak bych to mohl udělat.“ No jednoduše: $muj_OBJ = |
||
Joker Profil |
#5 · Zasláno: 20. 10. 2018, 16:16:13
Ještě doplnění:
henz: „Ale opravdu je tenhle proces tak pomalý že bych se tomu měl vyhnout?“ Rozdíl bude hodně malý, spíš jde o to, že v použití toho objektu nevidím žádnou výhodu. |
||
henz Profil * |
#6 · Zasláno: 20. 10. 2018, 16:26:32
Joker:
hm, to jo, lae zase nemusím psát uvozovky a hranatý závorky :-), pomlčka a šipka mi přijde přehlednější. A to plnění do pole je rychlejší než do objektu nebo je to neměřitelné? |
||
Joker Profil |
#7 · Zasláno: 20. 10. 2018, 17:48:17
henz:
„nemusím psát uvozovky a hranatý závorky“ Tomu s uvozovkami nerozumím a místo hranatých závorek tam jsou složené a navíc pomlčka a většítko. Porovnání těch zápisů: // pole $foo[$bar] // anonymní objekt $foo->{$bar} |
||
henz Profil * |
Joker:
nechápu proč tam dáváš ty složené závorky, já píšu takto: $zbozi->jablko // vrátí se číslo např. 35 je anonymní objekt v něčem špatný? Já sem tento zápis co píšu já (object) [] viděl hodněkrát. |
||
Joker Profil |
#9 · Zasláno: 20. 10. 2018, 20:18:33
henz:
Jenže jak může skript u anonymního objektu z databáze vědět jaké má vlastnosti a jak se jmenují (aby to tam mohlo být natvrdo napsané)? Navíc název „jablko“ fungovat bude, ale „mošt“ nemusí fungovat vždycky a „Coca Cola“ nebo „7up“ skončí chybou. „je anonymní objekt v něčem špatný?“ Oproti poli mi to připadá méně přehledné a bude to pomalejší (u většiny použití nejspíš jen nepatrně). Spíš jde o to, že tam nevidím výhody. Ale možná to je tím ukázkovým příkladem, protože ten naznačuje, že mám v databázi v podstatě neznámé množství nějakých záznamů a ty nacpu jako vlastnosti objektu. Tady je pole řekl bych praktičtější- Na druhé straně, u té druhé alternativy zase typicky budu atributy toho objektu znát předem. V tom případě mi ale přijde lepší mu udělat třídu a mít to jako standardní objekt. Výhodu vidím třeba v lepší přehlednosti při vývoji a údržbě; Například normální třídu si může IDEčko „očuchat“ a pak automaticky doplňovat názvy vlastností, vidím rovnou jaké všechny vlastnosti má, apod. |
||
henz Profil * |
#10 · Zasláno: 20. 10. 2018, 21:54:51
Joker:
hm, zajímavé. Máš pravdu že ta coca cola by nešla a já sem s tim dopředu počítal proto to taky odděluju podtržítkem. „Jenže jak může skript u anonymního objektu z databáze vědět jaké má vlastnosti a jak se jmenují (aby to tam mohlo být natvrdo napsané)?“ a potřebuje to vědět? „Ale možná to je tím ukázkovým příkladem, protože ten naznačuje, že mám v databázi v podstatě neznámé množství nějakých záznamů a ty nacpu jako vlastnosti objektu.“ $settings->pocet_clanku // 10 $settings->pocet_komentaru // 20 $settings->registrace // 0 nebo 1 já sem koupil yablkův php online kurz a on tam také vytvářel objekty z pole, protože se mu to psalo lépe a lépe to i vypadalo. Já v tom také výhodu nevidím. Ale jestli tam je rychlostní rozdíl tak budu používat pole. Z jakého důvodu to je pomalejší? Přístup k objektu je samo o sobě pomalejší než k hodnotám pole? |
||
Joker Profil |
#11 · Zasláno: 21. 10. 2018, 09:42:14
henz:
„a potřebuje to vědět?“ Tak pokud bych tahal z databáze to zboží, jak vím, že tam je zrovna jablko? Navíc v případě toho zboží asi budu chtít věci jako vypsat všechny položky a podobně, což jde s polem lépe. S tím nastavením, kde ty položky jsou v podstatě dané, to bude použitelné lépe. I když já bych spíš vytvořil normální třídu. Protože s anonymním objektem když za rok budu přidávat nový kód, budu muset dohledávat, jestli počet článků je pocet_clanku, Pocet_clanku, PocetClanku, … Načítání dat pravda nebude takhle triviální, ale nějaký automapper („pro každý výsledek z databáze: Pokud má objekt vlastnost stejného jména, přiřaď hodnotu“) nebude o moc složitější. Já osobně většinou používám obrácený přístup, místo všech hodnot obsahuje konfigurační objekt jen metodu GetValue($key) , takže by to bylo například $settings->GetValue("pocet_clanku"); (přičemž "pocet_clanku" by se měl vyhodit do nějaké konstanty).
Který přístup je lepší bude asi záviset na konkrétní situaci. „Z jakého důvodu to je pomalejší?“ Práce s objekty v PHP znamená určitou režii navíc. I když to bude zanedbatelné a je zbytečné se kvůli tomu objektům vyhýbat, zvážil bych to v situaci, kdy použití objektu nepřináší žádné zjevné výhody. |
||
Časová prodleva: 7 let
|
0