Autor | Zpráva | ||
---|---|---|---|
Monkeys Profil * |
#1 · Zasláno: 8. 1. 2013, 13:08:44
Zacal som sa zaujimat o OOP koli lepsej strukturovanosti a prehladnosti kodu a mam taku banalnu otazku.
Ak mam v OOP napisane: $this->view = new View(); $view = new View(); ale Ak mam v OOP napisane: $this->view->msg = "Táto stránka neexistuje"; Dost casto si niektore riadky v hlave prekonvertujem na proceduralne php pre lepsie pochopenie. Je to podobne ako ked som zozaciatku prepocitaval euro na koruny :) M. |
||
Radek9 Profil |
#2 · Zasláno: 8. 1. 2013, 13:20:51
Monkeys:
Co má tohle společného s procedurálním PHP? Buď uložíš instanci do proměnné nebo do datové položky. Stejně tak dobře můžeš napsat tohle: $view = new View(); $this->view = $view; $view = $this->view; $view->msg = "Tato stránka neexistuje"; |
||
Someone Profil |
$this->view je vlastnsost view objektu, ve kterém se nyní nacházíš. Pro zjednodušení si zkus objekt představit, jako pole:
$this = array(); Objekt má nějakou vlastnost. Do našho pole si to promítneme jako index: $this = array( "view" => null ); null jsem nastavil záměrně, protože bez toho by se to bralo jako hodnota pro "vlastnost"(v oop) s indexem [0] tento kód $this->view = "Ahoj"; přiřadí této vlastnosti nějakou hodnotu. V našem poli by to vypadalo asi takto: $this = array("view"=>"ahoj");
Když ale do té vlastnosti nepřiřadím String (v našem případě Ahoj), ale nějaký objekt (pro zjednodušení nějaké další pole), tak to vypadá takto: V OOP: $this->view = new View();
procedurálně si to můžeš představit jako $this = array("view"=$view); $view by mohlo být klidně další pole: $view = array(); pole, které má své vlastní indexy (vlastnosti v OOP).
Takže pomocí $this->view přistopíš do objektu $this a pomocí $this->view->ahoj přistupuješ do vlastnosti ahoj, která je v objektu, který je uložen v $this->view . Na naší ukázce s poli, by to vypadalo takto: $this = array("view"=>array("ahoj"=>"něco"));
echo $this->view->ahoj; si můžeš představit jako echo $this["view"]["ahoj"]; // vypíše něco. Je třeba aby si to bral s obrovskou rezervou, protože přirovnávat objekty k asociativním polím je odemne velmi troufalé, takže bych se rád omluvil všem, kteří problematiku OOP chápou a tu hrudku praktických nesmyslů, kterou jsem uvedl výše mi snad odpustí :). [#2] Radek9 Jak již Monkeys uváděl. Snaží si to představit na urovni procedurálního programování, aby mu to bylo malinko srozumitelnější. To, že na něj vychrlíš 4 řádky kódu, které nějak neokomentuješ, nevysvětlíš, není zrovna nápomocné. |
||
Monkeys Profil * |
#4 · Zasláno: 8. 1. 2013, 13:34:29
Someone:
Klobuk dolu pre mna ako laika v OOP si to vysvetlit dokonale. M. |
||
aaaaaaa Profil * |
#5 · Zasláno: 8. 1. 2013, 13:37:42
Monkeys:
Asi chápu, proč si chceš překládat OOP do procedurálního kódu, ale nejsem si jistej, jestli je to správně. Musíš uvažovat trošku jinak. Zažít si, co co znamená. Že třeba: $view = new View(); $view->msg = "Tato stránka neexistuje"; ... je vytvoření nové instance objektu view, ten je celý uložen do proměnné $view. V druhém řádku pak nastavuješ atribut třídy view na "Tato stránka neexistuje". Je to jednoduché, možná chce trochu času, než to člověk vztřebá a zažije se mu to. Chce to zkoušet a hrát si s tím, abys pochopil, co proč a jak. Převádění na procedurální programování nemusí být úplně nejšťastnější, protože jde o odlišný styl programování a především přístup k němu... Toť můj názor. |
||
Radek9 Profil |
#6 · Zasláno: 8. 1. 2013, 13:43:31
Someone:
Já si právě úplně nemyslel, že skutečně myslí procedury, když napsal tohle jako ten přepis: $view = new View(); „protože přirovnávat objekty k asociativním polím je odemne velmi troufalé“ Náhodou je to dle mě nejinteligentnější popis. Taky se na tom staví např. kompletně celý JavaScript. ;-) |
||
Časová prodleva: 13 let
|
0