« 1 2 »
Autor Zpráva
suky
Profil
Jde nejakym zpusobem dostat promena nadeklarovana pred tridou do te tridy krome parametru konstruktoru?
BetaCam
Profil
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
nj ale ja myslel aby to nebylo v konkretni instanci... myslim neco jako global ve funkcich...
Mastodont
Profil
Přes $GLOBALS ??
suky
Profil
jak?
suky
Profil
pujde to jako $GLOBALS[string] = "string";
class trida
{
var $prom;
function trida
{
$this -> prom = $GLOBALS[string];
}
}
BetaCam
Profil
Mastodont

Přes $GLOBALS ??

ale notak nebylo by lepší udělat tu proměnnou ve třídě jako statickou??
suky
Profil
takze
class trida
{
var $prom = "string";
}
BetaCam
Profil
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
hm ok jenom se chci zeptat k cemu uvadis tu funkci __construct() ??
BetaCam
Profil
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
tak to jo diky moc...
Mastodont
Profil
BetaCam
On chtěl proměnnou deklarovanou MIMO třídu. (Možná už nechce, ale takové bylo zadání :-))
suky
Profil
Mastodont
jj, mas pravdu, ja si s tim jeste pohraju...
BetaCam
Profil
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
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
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
BetaCam
A jakej to bude mit vliv na celkovy stranky, kdyz promenny zadam na urovni tridy nebo uz pred tridou?
suky
Profil
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
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
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
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
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
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
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
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
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
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
BetaCam
ok diky
suky
Profil
huh na neco sem narazil, myslis ze mi to postaci, pokud to vsechno pochopim ;) ????
http://php.interval.cz/objektove-orientovane-programovani-oop-v-php/
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: