Autor | Zpráva | ||
---|---|---|---|
ReVolt Profil |
Ahoj, doufám, že jsem téma zařadil správně, nyní už k dotazu:
do jaké míry doporučujete OOP v PHP, zatím jsem web objektově nepsal a neumím si představit jak to do objektů převést, jakým způsobem se mám na stránku podívat, abych ji správně "rozsekal" do jednotlivých tříd. S objektovým programováním mám zkušenosti především v C++ a CLispu, takže začít psát objektově v PHP by pro mě neměl být problém, jen tam (na www stránkách) tak nějak nevidím ty třídy, prolezl jsem si PHPFusion a doufal jsem že mi to nějak pomůže, ale nepomohlo. Budu vděčný za jakékoliv postřehy Předem díky EDIT: ještě jak je to z hlediska efektivity, není lepší když např. menu vyplivnu rovnou z DB, než abych ho načetl někam do objektu a až pak to metodou tiskl? |
||
Pan X Profil |
#2 · Zasláno: 9. 5. 2012, 16:41:22
Přečti si něco o MVC struktuře a osobně bych doporučil prostudovat fungování frameworků a nějaký i začít používat (např. Nette) mě osobně to pomohlo pochopit celé OOP v PHP
|
||
KKK Profil * |
#3 · Zasláno: 9. 5. 2012, 19:15:01
Pro pochopení OOP a návrhových vzorů je IMHO lepší Zend. Nette si David G. 'bastlí' dle nálady.
|
||
ReVolt Profil |
#4 · Zasláno: 9. 5. 2012, 20:00:29
děkuji, podívám se tedy na ten zend a nette
|
||
Majkl578 Profil |
#5 · Zasláno: 9. 5. 2012, 20:25:16
[#3] KKK:
To je velmi odvážné a nepodložené tvrzení. Za bastl se považuje amatérský a nekvalitní výtvor, ani jedním Nette není. Ty jsi asi bastlem myslel to, že se Nette aktivně vyvýjí a často se mění. Zřejmě sis už ale nevšiml, že poměrně nedávno vyšla první stable verze 2.0. K ní je zároveň i aktuální dokumentace a při specifických problémech je zde aktivní komunita na českém fóru nebo na Jabberu v Nette místnosti. Zend je akorát obrovský moloch, ve kterém se začátečník velice rychle ztratí. |
||
ReVolt Profil |
#6 · Zasláno: 9. 5. 2012, 20:31:45
Majkl578:
tak tedy nette je na začátek lepší? |
||
Darker Profil |
#7 · Zasláno: 9. 5. 2012, 21:27:40
ReVolt:
„tak tedy nette je na začátek lepší?“ Asi se budeš muset podívat na obojí a udělat si vlastní názor. Pokud se podíváš jen na jedno, velice dlouho u toho zůstaneš. |
||
_construct Profil * |
#8 · Zasláno: 9. 5. 2012, 22:24:40
Napríklad typicky príklad použitia triedy je:
<?php class HTML { public function H($Level, $Text, $Attr='') { return '<h'.$Level.$Attr.'>'.$Text.'</h'.$Level.">\n"; } public function P($Text, $Attr='') { return '<p'.$Attr.'>'.$Text."</p>\n"; } public function A($Href, $Label, $Target='_self', $Title='', $Attr='') { if(empty($Title)){ $Title = $Label; } return '<a href="'.$Href.'" target="'.$Target.'" title="'.$Title.'"'.$Attr.'>'.$Label."</a>"; } public function Li($Item, $Attr='') { return '<li'.$Attr.'>'.$Item."</li>\n"; } public function Ul($List, $Attr='') { return '<ul'.$Attr.">\n".$List."</ul>\n"; } public function Table($DataArray, $Headers=NULL) { if(is_array($DataArray)) { $Table = "<table>\n"; if(is_array($Headers)&&!empty($Headers)){ $Table.= "<tr>\n"; foreach($Headers as $Column => $Header) { $Table.= '<th>'.$Header['name']."</th>\n"; } $Table.= "</tr>\n"; } foreach($DataArray as $Row => $Line) { $Table.= "<tr>\n"; foreach($Line as $Column => $Value) { $Table.= '<td>'.$Value."</td>\n"; } $Table.= "</tr>\n"; } $Table.= "</table>\n"; return $Table; } } public function Image($ImgSrc, $Alt, $Width=NULL, $Height=NULL, $Map='', $Attr='') { $Img ='<img src="'.$ImgSrc.'" alt="'.$Alt.'" '; if($Width and $Height) { $Img.='width="'.$Width.'" height="'.$Height.'" '; } if($Map) { $Img.='usemap="#'.$Map.'" '; } return $Img.$Attr." />\n"; } // Atd. } ?> |
||
ReVolt Profil |
#9 · Zasláno: 9. 5. 2012, 22:32:23
_construct:
díky tohle mi dalo nějakou představu jak se to asi dělá, třeba můžu vytvořit třídu na menu, nebo článek, ale dalo by se to aplikovat na celý dokument, že bych mel třeba class page, který by byl kontejnerem pro všechno ostatní? |
||
Nox Profil |
#10 · Zasláno: 9. 5. 2012, 22:52:21
_construct:
Co je v tvém příkladu za OOP, jaké to využívá mechanismy tříd? Žádný bohužel nevidim, je to jen kontejner na funkce ... fakt radši to Nette, nebo aspoň Zend |
||
Majkl578 Profil |
#11 · Zasláno: 9. 5. 2012, 22:59:31
_construct:
„Napríklad typicky príklad použitia triedy je:“ Asi jsi chtěl říct typicky špatný příklad. Pouze jsi seskupil funkce do třídy a tu pasoval na úroveň jmenného prostoru. Jako příklad OOP je to zcela nepoužitelné a šlo by to naopak uvést jako příklad toho, co OOP rozhodně není. [#6] ReVolt: Domnívám se, že pro začátečníka ano, některé z výhod jsem uvedl už v [#5]. Nicméně nikomu svůj názor nevnucuji, KKK by zjevně nesouhlasil. :) |
||
Darker Profil |
#12 · Zasláno: 9. 5. 2012, 23:08:58
ReVolt:
Doporučuju ti šablonový systém. Pokud s ním správně pracuješ lze dosáhnout ideálního rozdělení zobravací plochy (šablony), zpracování dat (PHP skripty) a dat samotných (MySQL). Vytvářet web podle constructova nápadu mi přijde jako šílenost, nicméně když už, udělal bych si nějakou lepší verzi třídy DOMDocument a v té: $web = new HTMLTrida(); $title = new HTMLElement("title","titulek"); $web->head[0]->appendChild($title); |
||
ReVolt Profil |
#13 · Zasláno: 10. 5. 2012, 11:51:45
děkuji všem za příspěvky, díval jsem se na zend a nette a to nette mi přijde takové logičtější tak se vrhnu to tohle
|
||
_construct Profil * |
#14 · Zasláno: 10. 5. 2012, 14:12:39 · Upravil/a: _construct
Nox:
V mojom príklade nie žiadny objekt, je to len trieda, nič viac... Z takej triedy sa v ramci OOP ani nikdy žiadna instancia nevytvára. Ano je to defakto kontajner na fukcie. Majkl578: Je rozdiel naučiť sa používať hotový framework a napísať si svoj vlastný. |
||
Nox Profil |
#15 · Zasláno: 10. 5. 2012, 15:42:10
_construct:
"Ano je to defakto kontajner na fukcie." a tudíž ne OOP...no aspoň jsme si to vyjasnili :) K použití jaké píšeš ti tam chybí static. Jinak v OOP nemusí být třídy aby to bylo OOP. -- Chybí ti tam ještě třetí možnost a to "prozkoumat, jak hotový framework pracuje, jaké používá programovací principy a vzory atd.". |
||
KKK Profil * |
#16 · Zasláno: 10. 5. 2012, 18:29:17
Majkl578:
Z hlediska návrhových vzorů je Nette oproti Zendu bastl. Zend se narozdíl od Nette striktně drží návrhových vzorů, čímž působí jako složitý "moloch", který se zpočátku jen těžko chápe. Mé tvrzení lze podložit zdrojáky obou frameworků:) Je otázka zda začátečník na nějaké návrhové vzory vůbec hraje, když ani většina "profi" společností na ně nehraje.. Doporučuju pročíst například http://objects.cz Jelikož v Nette vyvýjím(IMHO je pro malé až střední projekty v ČR ideální), tak ho samozřejmě aktivně sleduji;) |
||
Tori Profil |
#17 · Zasláno: 10. 5. 2012, 18:37:01
Nox:
„v OOP nemusí být třídy aby to bylo OOP“ Tohle mě zaujalo: Mohu teda mít vše jen ve funkcích nebo i mimo ně, a jednotlivé související funkčnosti seskupím např. do includovaných souborů - a přitom to bude možné považovat za OOP? |
||
David Grudl Profil |
> Mé tvrzení lze podložit zdrojáky obou frameworků:)
To by mě velmi zajímalo. (Nemyslím to nějak pejorativně, posměšně, ironicky, vážně by mě to zajímalo, rád Nette vylepším.) ps. v Nette také vyvíjím a aktivně ho sleduji ;) |
||
Nox Profil |
Tori:
Tak ono v objektovém jazyce by asi nějaké ty objekty být měly :) Ale třída je jen šablona na objekty, zjednodušovák na jednodušší instanciaci a definici. Typehintování by se mělo řešit přes interfacy, ty jsou totiž spojené se základem OOP - zprávami. Kvalitně to je popsané zde bych řek http://blog.vyvojar.cz/pbouda/archive/2008/07/30/fundamenty-objektoveho-paradigmatu.aspx Poučné taky bude se kouknout na jiné jazyky - třeba známý JavaScript je beztřídní, i když to tam jde celkem emulovat. Stejně tak (starší) Self je prototypový (alespoň co říká wiki, ještě jsem se neseznámil). Edit: píšu obecně, ne jen o PHP @ Medvídek |
||
ReVolt Profil |
#20 · Zasláno: 10. 5. 2012, 20:47:32
díky za konstruktivní diskuzi, OOP mi není cizí, jak jsem již psal tak mám jisté zkušenosti, mě by více zajímalo jak to aplikovat na web, nevíte někdo zda existuje nějaký tutoriál OOP v PHP, např. jak vytvořit fční. stránku pomocí objektů.
Samozřejmě si projdu framework nette, ale přece jen, spousta kódu určitě není založena na triviálních úvahách. |
||
Tori Profil |
#21 · Zasláno: 10. 5. 2012, 22:38:31
Nox:
Děkuju za zajímavý článek! :) |
||
Medvídek Profil |
#22 · Zasláno: 10. 5. 2012, 22:43:33
Nox:
„Tak ono v objektovém jazyce by asi nějaké ty objekty být měly :)“ Mně PHP nepřipadá jako stvořené pro OOP, spíše naopak. |
||
pilec Profil * |
#23 · Zasláno: 10. 5. 2012, 23:09:36
Mohu doporučit Nette quickstart: http://doc.nette.org/cs/quickstart pokud chapes objektove programovani melo by ti to jit pekne od ruky a pracuje se tam v podstate temer vyhradne s objekty.
|
||
ReVolt Profil |
#24 · Zasláno: 11. 5. 2012, 07:23:08
pilec:
dík, určitě se na to podívám |
||
Časová prodleva: 13 let
|
0