Zadejte hledaný výraz...

Použití static u metod objektů, ano či ne?

Ondřej Záruba
verified
rating uzivatele
27. 8. 2011 15:02:40
Zdravím,
pročítal jsem nejaké články a diskuse o použití static u metod objektů a zarazilo mě jak moc se jednotlivé názory liší.
Někdo tvrdí že používat statické metody je výhodou někdo zase naopak, že používat je je velká chyba.
Zajímalo by mě jak to tedy je?
Osobně mi přijde použití static u metody jako ulehčení práce. Když píši vlastní knihovnu (model) do frameworku snažím se o to, aby se dala použít kdykoliv aby byla co nejvíce univerzální, přijde mi použití static vhodnější.
Když pak s knihovnou (modelem) potřebuji pracovat zavolám jednoduše v controlleru (presenteru)
myClass::myMethod('param');
namísto
$myClass = new myClass;
$myClass->myMethod('param');
Jak je to tedy s použitím static u metod objektů?
27. 8. 2011 15:02:40
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671140
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
27. 8. 2011 15:14:08
staticke metody jsou v php bohuzel nutnost - proc? protoze neni mozne rozsirovat vestavene objekty o dalsi metody a hlavne ne vsechno je v php objekt. takovym tridam se rika utility tridy - napriklad tridy pro cisla, retezce, mnozna cisla, prevadeni datumu, apod.
vsude jinde je to ale spatne - pouzivat statickou metodu jenom protoze je to vice "po ruce", neni dobry napad - a vymsti se Vam to.
prinejmensim takovy kod jednoduse nejde otestovat - bez pouziti nejake velmi cerne magie.
27. 8. 2011 15:14:08
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671139
sysline
verified
rating uzivatele
(2 hodnocení)
27. 8. 2011 15:23:10
Staticke metody jsou plnohodnotnou soucasti OOP patternu, neni na nich nic spatneho, naopak na mnoha mistech velmi ulehcuji praci. Krom toho, se diky nim da zabranit zbytecnym vytvarenim instanci objektu, tam kde to neni nutne. Dany kod LZE testovat naprosto bez problemu. Zkratka, pouzivani statickych metod je naprosto legitimni technika a cast aplikacni logiky. To jestli jeji pouziti je nebo neni spatne nezavisi na staticke metode jako takove, ale na tom, kde a jak ji pouzijete.
27. 8. 2011 15:23:10
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671138
Senky
verified
rating uzivatele
(4 hodnocení)
27. 8. 2011 15:28:57
Napsal vedouci;694471
staticke metody jsou v php bohuzel nutnost - proc? protoze neni mozne rozsirovat vestavene objekty o dalsi metody a hlavne ne vsechno je v php objekt...
Ako je to myslené? V php sa súce nedajú objekty rozširovať o nové metódy, nikto ale nebráni tomu, vytvoriť nejakú triedu, ktorá základnú rozširuje a používať tú - sú v nej všetky metódy materskej triedy + vlastné. A pokiaľ ide o metódy typu __construct() a podobné, dajú sa veľmi ľahko simulovať aj v inej triede po zadaní parametrov, ktoré sú potrebné. Alebo mám vo všetkom chaos? Mne to príde ako v pohode riešenie - lepšie ako keby sa v php povolilo rozširovanie objektov o nové metódy...
27. 8. 2011 15:28:57
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671137
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
27. 8. 2011 15:42:22
Napsal sysline;694473
Staticke metody jsou plnohodnotnou soucasti OOP patternu, neni na nich nic spatneho, naopak na mnoha mistech velmi ulehcuji praci. Krom toho, se diky nim da zabranit zbytecnym vytvarenim instanci objektu, tam kde to neni nutne. Dany kod LZE testovat naprosto bez problemu. Zkratka, pouzivani statickych metod je naprosto legitimni technika a cast aplikacni logiky. To jestli jeji pouziti je nebo neni spatne nezavisi na staticke metode jako takove, ale na tom, kde a jak ji pouzijete.
tak jeste jednou... staticke metody jsou vzdy spatny napad a kazdy programator by se jim mel vyhybat jak nejvic to jde. a ne, opravdu je nelze testovat a hned ti dam priklad - zkus napsat program, ktery vypise "pulnoc" pokud je aktualni cas roven presne 0:00, cas zjistuj pomoci TimeUtils::getTimeStr() a pak ho zkus otestovat...
a neni to pripad vycucany z prstu, minimalne jednou uz jsem to resil a tady je dukaz, ze nejsem sam: http://stackoverflow.com/questions/2001671/override-java-system-currenttimemillis
27. 8. 2011 15:42:22
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671136
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
27. 8. 2011 15:44:36
Napsal Senky;694474
Ako je to myslené? V php sa súce nedajú objekty rozširovať o nové metódy, nikto ale nebráni tomu, vytvoriť nejakú triedu, ktorá základnú rozširuje a používať tú - sú v nej všetky metódy materskej triedy + vlastné. A pokiaľ ide o metódy typu __construct() a podobné, dajú sa veľmi ľahko simulovať aj v inej triede po zadaní parametrov, ktoré sú potrebné. Alebo mám vo všetkom chaos? Mne to príde ako v pohode riešenie - lepšie ako keby sa v php povolilo rozširovanie objektov o nové metódy...
ve smyslu, ze nejde pridavat metody do existujicich trid, coz vede ke spouste ruznych hackum, ktere delaji v kodu zbytecny chaos
27. 8. 2011 15:44:36
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671135
sysline
verified
rating uzivatele
(2 hodnocení)
27. 8. 2011 15:51:05
Pane vedouci :) Pokud tvrdite, ze staticke metody jsou vzdy spatny napad a ze je spatne, kdyz nelze rozsirovat existujici metody ( od toho tu mame samozrejme dedicnost ) tak jste hold ocividne do teto chvile nepochopil princip objektove orientovaneho programovani :) Ostatne, proc by v kazdem objektovem jazyce byly, kdyz jsou tak spatne :)
Co se tyka vaseho prikladu definice TimeUtils::getTimeStr() je uplne to same, jko kdybych si udelal holou funkci getTimeStr() pracuje se s tim stejne, testuje se to stejne a vazne mi chcete tvrdit, ze nelze testovat
if ( TimeUtils::getTimeStr() == '0:00' ) { echo 'pulnoc'; } ??? No to snad ne, ze ne? :)
27. 8. 2011 15:51:05
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671134
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
27. 8. 2011 16:05:44
Napsal sysline;694477
Pane vedouci :) Pokud tvrdite, ze staticke metody jsou vzdy spatny napad a ze je spatne, kdyz nelze rozsirovat existujici metody ( od toho tu mame samozrejme dedicnost ) tak jste hold ocividne do teto chvile nepochopil princip objektove orientovaneho programovani :) Ostatne, proc by v kazdem objektovem jazyce byly, kdyz jsou tak spatne :)
Co se tyka vaseho prikladu definice TimeUtils::getTimeStr() je uplne to same, jko kdybych si udelal holou funkci getTimeStr() pracuje se s tim stejne, testuje se to stejne a vazne mi chcete tvrdit, ze nelze testovat
if ( TimeUtils::getTimeStr() == '0:00' ) { echo 'pulnoc'; } ??? No to snad ne, ze ne? :)
me to moc vesele neprijde - je tak tezke si predstavit script, ktery posle pulnocni varku emailu tisicum zakazniku? a co takhle rovnou staticke posilani mailu? taky jednoduche otestovat? fajn, tak k tomu jeste prihodte prilohy. priklad byl zamerne jednoduchy, aby bylo jasne, ze to proste NEJDE
jinak ano, staticka metoda je stejne testovatelna jako fce, tzn. neni
(a budte rad, ze na tu poznamku o znalostech nebudu reagovat)
27. 8. 2011 16:05:44
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671133
sysline
verified
rating uzivatele
(2 hodnocení)
27. 8. 2011 16:10:33
No pokud se tim zivite, tak mate pravdu, moc vesele to neni :) A ja jsem netvrdil, ze funkcionalitu odesialni varky emailu mate cpat do staticke metody. Z vaseho prikladu neni jasne nic. Jedine co jsem z vaseho prikladu pochopil, ze v tom mate gulas :)
27. 8. 2011 16:10:33
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671132
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
27. 8. 2011 16:24:27
tak snad to ostatni pochopi, jenom dodam, ze pokud by program prijimal instanci TimeService a MailService, tak ho lze velmi jednoduse otestovat - lze simulovat pulnoc, prestupne roky, rok 2038, cokoliv, stejne tak to jde udelat i s mailovou casti - lze testovat nedostupnost sluzby, moc velkou prilohu, ruznou diakritiku, ... a to vsechno na realnych datech, aniz bysme ve skutecnosti cokoliv odeslali. nic z toho jednoduse neni se statickymi metodami a nebo fcemi mozne.
27. 8. 2011 16:24:27
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671131
sysline
verified
rating uzivatele
(2 hodnocení)
27. 8. 2011 16:28:27
Nic z toho ani naznakem nesouvisi se statickou metodou, ale s aplikacnim navrhem jako takovym. Vse co zminujete, muzete delat i ve skriptu, kde staticke metody pouzijete, pokud samozjreme vse nenacpete do jedne staticke metody, ale to neni o tom, ze by staticka metoda byla spatna, ale ze vase pouziti je chybne.
27. 8. 2011 16:28:27
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671130
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
27. 8. 2011 16:33:43
prosim tedy o priklad, kdy je staticka metoda v poradku a nejde o utilitni tridu a nebo jine obchazeni omezeni php (primitivni datove typy) - jinymi slovy aby ten priklad platil i pro python, ruby a nebo treba smalltalk - a prosim zadny antipattern ve stylu singletonu a nebo registry.
27. 8. 2011 16:33:43
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671129
sysline
verified
rating uzivatele
(2 hodnocení)
27. 8. 2011 16:42:41
27. 8. 2011 16:42:41
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671128
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
27. 8. 2011 16:47:33
no to je doufam vtip... http://lmgtfy.com/?q=repository+pattern
27. 8. 2011 16:47:33
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671127
sysline
verified
rating uzivatele
(2 hodnocení)
27. 8. 2011 16:49:05
argument hodny genia :)
27. 8. 2011 16:49:05
https://webtrh.cz/diskuse/pouziti-static-u-metod-objektu-ano-ci-ne#reply671126
Pro odpověď se přihlašte.
Přihlásit