Autor | Zpráva | ||
---|---|---|---|
suky Profil |
#1 · Zasláno: 18. 1. 2008, 18:54:50
Jde nejakym zpusobem dostat promena nadeklarovana pred tridou do te tridy krome parametru konstruktoru?
|
||
BetaCam Profil |
#2 · Zasláno: 18. 1. 2008, 19:08:21 · Upravil/a: BetaCam
Záleží k čemu to potřebuješ. Pokud to potřebujes dostat třeba do konkrétní instance můžeš jí tam dostat třeba metodou na úrovni dané třídy.
|
||
suky Profil |
#3 · Zasláno: 18. 1. 2008, 19:10:24
nj ale ja myslel aby to nebylo v konkretni instanci... myslim neco jako global ve funkcich...
|
||
Mastodont Profil |
#4 · Zasláno: 18. 1. 2008, 19:11:19
Přes $GLOBALS ??
|
||
suky Profil |
#5 · Zasláno: 18. 1. 2008, 19:12:01
jak?
|
||
suky Profil |
#6 · Zasláno: 18. 1. 2008, 19:14:33
pujde to jako $GLOBALS[string] = "string";
class trida { var $prom; function trida { $this -> prom = $GLOBALS[string]; } } |
||
BetaCam Profil |
#7 · Zasláno: 18. 1. 2008, 19:14:46
Mastodont
Přes $GLOBALS ?? ale notak nebylo by lepší udělat tu proměnnou ve třídě jako statickou?? |
||
suky Profil |
#8 · Zasláno: 18. 1. 2008, 19:16:12
takze
class trida { var $prom = "string"; } |
||
BetaCam Profil |
#9 · Zasláno: 18. 1. 2008, 19:23:53
suky
Tak sem to nemyslel. Myslel udělat z ní statickou proměnnou. Tedy něco jako : class Test { static $prom = null; function __construct(){} function render(){ echo self::$prom.'<br />'; } } Test::$prom = 'abc'; $obj = new Test; $obj->render(); |
||
suky Profil |
#10 · Zasláno: 18. 1. 2008, 19:27:03
hm ok jenom se chci zeptat k cemu uvadis tu funkci __construct() ??
|
||
BetaCam Profil |
#11 · Zasláno: 18. 1. 2008, 19:29:07 · Upravil/a: BetaCam
suky
No je to konstruktor. V tomhle případě je k ničemu, protože se v něm nic neděje, ale já sem zvyklej ho uvádět. |
||
suky Profil |
#12 · Zasláno: 18. 1. 2008, 19:29:35
tak to jo diky moc...
|
||
Mastodont Profil |
#13 · Zasláno: 18. 1. 2008, 19:31:35
BetaCam
On chtěl proměnnou deklarovanou MIMO třídu. (Možná už nechce, ale takové bylo zadání :-)) |
||
suky Profil |
#14 · Zasláno: 18. 1. 2008, 19:36:11
Mastodont
jj, mas pravdu, ja si s tim jeste pohraju... |
||
BetaCam Profil |
#15 · Zasláno: 18. 1. 2008, 19:54:59
Mastodont
No deklarovanou jí může mít kde chce. Jen si ji bude muset do třídy přiřadit. Pokud se koukneš jak by suky $_GLOBALS['string'] použil viz. kód trochu vejš stejně by ji přiřadil vnitřní proměnné třídy. Dalsí problém je to, že suky napsal: nj ale ja myslel aby to nebylo v konkretni instanci... myslim neco jako global ve funkcich... Pokud tuhle větu dobře chápu tak by promměná měla být stejná bez ohledu na konkrétní instanci třídy což by si zařídil pouze pokud by se používala proměnná $_GLOBALS['string'] přímo a nepřiřazovala se do vnitřní proměnné třídy. Pokud by si ji chtěl do vnitřní promměné přiřadit stejně tu proměnnou budeš muset udělat statickou. Navíc nejsem zastáncem používání globálních proměnných uvnitř tříd. :) Asi sem staromódní. :) |
||
suky Profil |
#16 · Zasláno: 18. 1. 2008, 20:01:20
BetaCam
Zkousel jsem oboje a s tim $GLOBALS mi to vyhovuje lepe, muj projekt se bude totiz sestavat z vice subdomen a nechtelo by se mi delat to pro kazdy znova a tak mam soubor nastaveni.php v kazdy subdomene, kde si jenom upravim portrebne hodnoty pro danou subdomenu, jsou to predevsim cesty (localhost/net) a nejake dalsi dorobnosti... |
||
BetaCam Profil |
#17 · Zasláno: 18. 1. 2008, 20:08:02
suky
Uf Uf popravdě neber to jako urážku, ale dostávat data z konfiguračních souborů a dostávat je do tříd pomocí globals??? To mi přijde jako pěkná prasárna. K tomuhle by měla podle mého názoru sloužit metoda init() na úrovni konfigurované třídy. |
||
suky Profil |
#18 · Zasláno: 19. 1. 2008, 09:19:43
BetaCam
A jakej to bude mit vliv na celkovy stranky, kdyz promenny zadam na urovni tridy nebo uz pred tridou? |
||
suky Profil |
#19 · Zasláno: 19. 1. 2008, 09:30:35
BetaCam
Jeste mam jeden dotaz, vsimam si, ze se asi v oop v php vyznas a ze taky uprednostnujes prvotni rozmysleni aplikace. Myslis, ze je lepsi mit jednu tridu, ktera bude obstaravat vse (kdyz si dobre seradim a napisu komentare, tak se v ni vyznam!) nebo vice trid? Odpovez pls na obe... |
||
Mastodont Profil |
#20 · Zasláno: 19. 1. 2008, 09:40:01
suky
Myslíš jednu třídu na celou aplikaci? IMHO totálně nešťastné řešení. Každá třída má vyjadřovat určitý celek s jedinečnou funkčností, například Validator, FormBuilder, DatabaseAccess (DAO) ... |
||
suky Profil |
#21 · Zasláno: 19. 1. 2008, 10:24:57
Mastodont
nj ale ja mam tridu stranka, ve ktery mam vscehno, co se na strance deje a ten tvuj z.B. validator nebo formBuilder mam jako metodu... |
||
bukaj Profil |
#22 · Zasláno: 19. 1. 2008, 12:16:36
suky
nj ale ja mam tridu stranka, ve ktery mam vscehno, co se na strance deje a ten tvuj z.B. validator nebo formBuilder mam jako metodu... V tom případě bys mohl stejně tak mít tyto funkce definované globálně a nic by se nezměnilo. Třída není odkladiště pro funkce. Aneb OOP za každou cenu... |
||
BetaCam Profil |
#23 · Zasláno: 19. 1. 2008, 13:50:47
suky
A jakej to bude mit vliv na celkovy stranky, kdyz promenny zadam na urovni tridy nebo uz pred tridou? To je špatně položená otázka. Neptej se jakej to má vliv na celkový stránky, ale jakej to má vliv na samotné třídy. Sem zastáncem názoru, že konkrétní třídy by neměly svou funkčnost svazovat s aplikací jako takovou. Pokud budes třídy nastavovat na úrovni aplikace a né na úrovni třídy tak ty nastavované třídy v menší či větší míře svážeš s aplikací což je podle mě špatně. Pokud by si v takovémhle případě chtěl ty třídy použít v jiné ( již funkční ) aplikaci budeš muset do jisté míry dělat úpravy v samotné aplikaci, aby si ty třídy zprovoznil. Tak a teď ty rozdíly v bodech : nastavení na úrovni aplikace Třída je svázaná s konkrétní aplikací. Třída neni samostatně funkční. Při přenosu třídy do jiné aplikace se nemohu spolehnout na její okamžitou funkci. nastavení na úrovni třídy Třída není svázaná s konkrétní aplikací. Třída je "plně" funkční i samostatně. Při přenosu do jiné aplikace je jistota její správné funkce a okamžité použitelnosti bez úpravy aplikace samotné. Myslis, ze je lepsi mit jednu tridu, ktera bude obstaravat vse (kdyz si dobre seradim a napisu komentare, tak se v ni vyznam!) Přesně tak jak ti odpověděli bukaj a Mastodont. Pokud se jedná o OOP tak jedna ze zásad je dodržovat soudržnost. Soudržnost tu v podstatě naznačil Mastodont takže já k jeho nastínění jen doplním, že soudržnost se netýká jen tříd, ale i jejich metod. Pokud tě tohle téma zajímá tak zkus zapátrat s panem Googlem. :) |
||
suky Profil |
#24 · Zasláno: 19. 1. 2008, 15:36:42
bukaj
A kdyz potrebuju mit VSECHNY funkce vzajemne propletene? Aneb OOP za každou cenu... To vubec neni pravda, mam to objektove, protoze jsem pred zacatkem realizace a v budoucnu se to bude hodit. Ted se ale ptam jestli mam na kazdou stranku umistit: $obecne = new obecne; $layout = new layout; $session = new session; $statistiky = new statistiky; Kdyz layout bude zaviset na obecne, ktery budou zaviset na session stejne jako statistiky, prave proto to resim... Bud necham jednu tridu a nebo je stejne budu muset nejak provazat... BetaCam Sem zastáncem názoru, že konkrétní třídy by neměly svou funkčnost svazovat s aplikací jako takovou Muzes mi vysvetlit proc? |
||
bukaj Profil |
#25 · Zasláno: 19. 1. 2008, 17:19:17
suky
A kdyz potrebuju mit VSECHNY funkce vzajemne propletene? Právě. Ty se pořád o objektech bavíš jakoby byly jen jakési kontenery pro funkce. Ale takové využití nemá nic poslečného s OOP. Nevím, jak znějí encyklopedické či učebnicové definice objektů. Ale představ si objekt jako hranatou krabičku. Na levé bočnici je dírka, do které věci házíš. V pravo je taky dírka, ale tou věci vystupují. Hořejšek je pokryt několika čudlíky. A tedy vezmeš si krabičku, něco do ní hodíš, zmáčkneš čudl a něco ti zase vyleze - jednoduché. Někdy můžeš vhodit několik věcí a tlumeně se z krabičky ozve: "Jasně!" a nic nevyleze ven. Jindy zase nevhodíš nic, krabička se otřese a zprava se ti vysype kupa krámů. Tobě je jedno, co krabička udělá s tím, co vhodíš. V manuálu se pouze dočteš, co musíš vhodit (a jestli vůbec něco) a co vyleze (a jestli vůbec něco) při zmáčknutí čudlíku. Teď si vezmi třebas televizi - krabička. Vzadu máš nějaké zdířky pro vstup (dírka, do které něco házíš), vpředu obrazovku (dírka, ze které něco leze) a po straně (či na spodku či kdekoli jinde rozeseté, avšak se stejnou funkcionalitou) čudlíky. Dalo by se říct, že televize je objekt. Tebe nezajímá, co se děje uvnitř, chceš si pouze vychutnat sledování kvalitního filmu či pořadu. OOP se tedy snaží přiblížit programování reálnému světu. Nic víc, nic míň. K čemu by ti v televizi byla výrobní linka pro automobily (formBuilder)? :) |
||
BetaCam Profil |
#26 · Zasláno: 19. 1. 2008, 17:42:57
suky
A kdyz potrebuju mit VSECHNY funkce vzajemne propletene? O tom opravdu pochybuji. Bud necham jednu tridu a nebo je stejne budu muset nejak provazat... Ano ale provážeš je logicky až na aplikační úrovni. Pochybuji, že třeba layout bude potřebovat session nebo pokud to vemu do detailu tak třeba statistiky budou potřebovat session, ale session nebudou potřebovat statistiky. Jak říkal bukaj: "Třída není odkladiště pro funkce". Jestli chceš začít delat OOP musíš se odprostit od postupů, které ses do ted naučil a začít znova, ale tentokrát už s OOP. Sem zastáncem názoru, že konkrétní třídy by neměly svou funkčnost svazovat s aplikací jako takovou Muzes mi vysvetlit proc? Ano můžu. Ber třeba že máš nějaký druhy tříd nazvu je třeba funkční ( Knihovní, Samostatné ) a aplikační ( Řídící, Složené ). Názvy ber s rezervou sou tu abych je nějak rozlišil. Funkční třídy : Třídy, které zaštitují nějakou určitou funkčnost : sem můžou patřit např. třídy ( nebo sady tříd ) jako: Sql Debug Session Validation Aplikační třídy : Třídy, které zaštitují funkčnost celku : sem zase můžou patřit ruzné druhy tříd např: Controllery Modely + další druhy tříd starající se chod konkrétní aplikace Aplikační třídy využívají funkcí funkčních tříd proto při přenosu do jiné jinak navržené aplikace je nutno přenést i funkční třídy. Což se ovšem v podstatě málo kdy dělá ( Myslím tim spojování dvou rozdílných aplikací ). Oproti tomu funkční třídy by měly bejt přenositelné mezi aplikacemi a proto na nich nezávislé. Pokud je funkční třída nezávislá na aplikaci tak po přenesení do jiné aplikace ji budes moct hned používat nastavíš pouze konfiguracní soubor třídy pro novou aplikaci a už jí můžeš plně využívat. Pokud, ale ta třída bude mít nastavení mimo sama sebe ( tedy závislou na aplikaci ) budu muset upravit i novou aplikaci, aby třídě předávala potřebné nastavení. Dalsí věc je, že pokud použiješ jako ty globals nemáš nikdy jistotu, že proměnná kterou ty používáš pro nastavení třídy neni použitá někde hluboko v nové aplikaci a tím pádem může tvá třída dostávat úplně zcestné nastavení. To je ten důvod přenositelnost. |
||
suky Profil |
#27 · Zasláno: 19. 1. 2008, 18:08:09
bukaj
Chapu co tim chces rict ;) BetaCam Jestli chceš začít delat OOP musíš se odprostit od postupů, které ses do ted naučil a začít znova, ale tentokrát už s OOP. Jasny, uz to pomalu zacinam chapat... Necham si poradit ;) |
||
BetaCam Profil |
#28 · Zasláno: 19. 1. 2008, 18:47:49
suky
Necham si poradit ;) Doporučuju ti nastudovat hodně materiálu. A hlavně ze začátku se nepouštět do žádnejch velkejch akcí. :) Až za nějakou dobu studovnání materiálů pochopíš OOP, uvidíš jak ti přijde ta tvoje myšlenka všechno spojit do jedné třídy zcestná. Ovšem předem tě upozornuju, že začít s OOP nejde za hodinu, ale je to beh na dlouhou trať. :) |
||
suky Profil |
#29 · Zasláno: 19. 1. 2008, 18:55:30
BetaCam
ok diky |
||
suky Profil |
#30 · Zasláno: 19. 1. 2008, 19:11:53
huh na neco sem narazil, myslis ze mi to postaci, pokud to vsechno pochopim ;) ????
http://php.interval.cz/objektove-orientovane-programovani-oop-v-php/ |
||
Téma pokračuje na další straně.
|
0