Autor | Zpráva | ||
---|---|---|---|
phobos9007 Profil |
#1 · Zasláno: 22. 2. 2011, 22:02:50
Zdravím,
V php jsem narazil na nepříjemné omezení. Nemohu zapsat: config::$language::$error; Apod. Copak vývojáře nenapadlo, že to bude někdo potřebovat? To musím asi dokola psát: $language = config::$language; $language::$error; Nevíte jak tuhle minelu nahlásit komunitě? Určitě nebudu první |
||
Lamicz Profil |
#2 · Zasláno: 22. 2. 2011, 22:13:56
No, upřímně, nepřipadá mi to jako šťastný OOP návrh ;) Statiсké metody se používají pro nějakou inicializaci apod., např. nějaká továrnička. Když už, asi bych to řešil přes __callStatic(); (od 5.3)
|
||
phobos9007 Profil |
#3 · Zasláno: 22. 2. 2011, 22:22:55
To nejsou statické metody, ale vlastnosti :)
Nebo znáš nějaký lepší koncept než jaký používám?: V souboru settings uživatel zadá název jazyka (třídy), settings se následně implementují do hlavní konfigurační třídy config a logicky se vytvoří globální přístupové body pro celý systém, takže např. config::$language. A pak kdekoliv v systému chci používat config::$language::TEXTY (konstanty nebo statiky). No není to jednoduché a praktické, když dopředu nevím, jaký jazyk (třídu) uživatel zvolí? A toho mám spoustu, takže opisovat to vypadá nehezky. Díky za rady |
||
Alphard Profil |
#4 · Zasláno: 22. 2. 2011, 22:42:08
phobos9007:
„settings se následně implementují do hlavní konfigurační třídy config“ Můžete ukázat kód, jak to máte řešené? |
||
ShiraNai7 Profil |
#5 · Zasláno: 22. 2. 2011, 22:44:26 · Upravil/a: ShiraNai7
phobos9007:
„Nebo znáš nějaký lepší koncept než jaký používám?“ Snad jakýkoliv koncept je lepší než ten, o který se tu snažíš. Proč na načítání jazykových položek nemáš funkci nebo metodu, která bude vracet záznamy podle aktivního jazyka? |
||
phobos9007 Profil |
#6 · Zasláno: 22. 2. 2011, 23:04:04
ShiraNai7:
„Proč na načítání jazykových položek nemáš funkci nebo metodu, která bude vracet záznamy podle aktivního jazyka?“ Proč tak složitě? Je to standardní postup, ale nechci to tak řešit. Kdyby jsi správně pochopil o co se snažím, tak mým zápisem jde všechno jednoduše bez nějakých metod, hold php to nepodporuje. Alphard: //File core.php require ("sesttings.php"); $config = new config ($language, ..., ...); //File test.php echo config::$language::$error404 |
||
Alphard Profil |
#7 · Zasláno: 22. 2. 2011, 23:32:45
phobos9007:
Já se snažím pochopit vaši myšlenku, ale zatím se mi to moc nedaří. Tohle nevypadá moc jako implemtace. $config ze 3. řádku se zahodí? Proč nemůžete použít $config->error404; (když už máte vytvořenou instanci pro dané parametry)?
„tak mým zápisem jde všechno jednoduše bez nějakých metod“ Metody jsou poměrně důležitou součástí OOP :-) Zdá se mi, že vaše snahy zjednodušit to kód naopak komplikují. |
||
ShiraNai7 Profil |
#8 · Zasláno: 22. 2. 2011, 23:36:20 · Upravil/a: ShiraNai7
phobos9007:
„jde všechno jednoduše bez nějakých metod“ K čemu děláš instanci třídy config („$config = new config ($language, ..., ...);“), když to pak voláš jen staticky? (Jestli to je kvůli voláni objektového __construct() který dělá něco statického tak to zde ani raději nepiš). Nebudu tě přesvědčovat, že tvůj výtvor nemá s OOP skoro nic společného. Chceš si prasit - pras si. Pak zde ale nechoď pro rady. edit: a když jde tedy o více :: v jednom zápisu, tak se obrať na http://bugs.php.net/ - rád se pobavím reakcí php komunity na tvé super vylepšení |
||
phobos9007 Profil |
#9 · Zasláno: 22. 2. 2011, 23:45:45
Alphard:
Dobře, polopatě :) Metody samozřejmě používám, ale jen kde je to nezbytně nutné. Kde to jde to řeším staticky. Proč? Protože to můžu volat odkukoliv. Tím odpovídám na vaši otázku: „Proč nemůžete použít $config->error404;“ Protože bych tu instanci $config musel do nějaké třídy vložit jako parametr, abych s ní mohl pracovat. Když je to staticky, nic takového nemusím dělat. A pro pana chytrého: Jak bys to řešil jinak no? Tak mi poraď jak se tomu vyhnout. Je lehké mudrovat, ale těžší poradit |
||
ShiraNai7 Profil |
#10 · Zasláno: 23. 2. 2011, 00:14:35
phobos9007:
Já se snažím radit. Ale radit někomu, komu připadají metody tak složité, že je nechce použivat, nemá moc cenu. |
||
Joker Profil |
#11 · Zasláno: 23. 2. 2011, 00:16:15
phobos9007:
„Metody samozřejmě používám, ale jen kde je to nezbytně nutné. Kde to jde to řeším staticky.“ To mi nedává smysl, on někdo nařídil, že statické mohou být jen atributy? Nebo jaký je problém použít statickou metodu? „Protože bych tu instanci $config musel do nějaké třídy vložit jako parametr, abych s ní mohl pracovat. Když je to staticky, nic takového nemusím dělat.“ Skript v [#6] si vytvoří instanci a potom staticky přistupuje k atributům třídy. Navíc mám dost pochybnosti, že $language je statický atribut nezávislý na instanci třídy. |
||
Alphard Profil |
#12 · Zasláno: 23. 2. 2011, 00:26:44
phobos9007:
Jak naznačil Joker, statické mohou být i metody. Využívá toho třeba dibi, kde můžete kdekoliv použít dibi::query() apod. Pro sdílení určitých proměnných napříč aplikací se často vytváří určitá třída, která se o to stará. V Nette je to Environment, v Zendu Zend_Registry. Přes jejich staticky volané metody lze zpřístupnit cokoliv. |
||
phobos9007 Profil |
#13 · Zasláno: 23. 2. 2011, 00:51:14
To jo no. Vím že existují statické metody, sám je používám jako singleton v db driverech. Znám více méně nazpaměť celý php manuál o oop, právě proto mi přišlo aktuální řešení omezené.
Když bych přepsal můj config a místo ukládání informací do vlastností je volal z metod, tak můžu klidně použít klasické: echo config::language ("error"); Takže si nemyslete že oop neumím. Znovu opakuji, že takhle jsem to řešil dopusud. Pořád ale jsem toho názoru, že echo config::$language::$error je usnadnění předešlé ukázky. Ale jak vidím, je to čistě individuální. Mějte se |
||
Joker Profil |
#14 · Zasláno: 23. 2. 2011, 07:51:45 · Upravil/a: Joker
phobos9007:
„Pořád ale jsem toho názoru, že echo config::$language::$error je usnadnění předešlé ukázky.“ Za prvé si neumím představit, jak by to bylo implementované. To by přece musel být mega-objekt, který bude mít všechny texty v třeba tisících statických atributů. Za druhé, opakuji: Pokud config je nastavení aplikace, nepřipadá mi, že by chybová hláška byla jeho statický člen. Jak to bude třeba pro různé jazyky? |
||
Časová prodleva: 13 let
|
0