Autor Zpráva
Monkeys
Profil *
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();
Teoreticky v proceduralnom php by som to mohol napisat takto:
$view = new View();

ale

Ak mam v OOP napisane:
$this->view->msg = "Táto stránka neexistuje";
Ako si to mam vysvetlit v proceduralnom php ?

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
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 *
Someone:

Klobuk dolu pre mna ako laika v OOP si to vysvetlit dokonale.

M.
aaaaaaa
Profil *
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
Someone:
Já si právě úplně nemyslel, že skutečně myslí procedury, když napsal tohle jako ten přepis:
$view = new View();
Protože to je stále objektové uvažování. Přišlo mi, že spíše nechápe tu víceúrovňovou strukturu.

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. ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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