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
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 *
Pro pochopení OOP a návrhových vzorů je IMHO lepší Zend. Nette si David G. 'bastlí' dle nálady.
ReVolt
Profil
děkuji, podívám se tedy na ten zend a nette
Majkl578
Profil
[#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
Majkl578:
tak tedy nette je na začátek lepší?
Darker
Profil
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 *
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
_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
_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
_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
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);
Určitě by tam šly udělat zkratky (například nastavení titulku přes vlastnost dokumentu). Ale nevidím tu rozdíl od psaní normálního HTML.
ReVolt
Profil
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 *
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
_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 *
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
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
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
Nox:
Děkuju za zajímavý článek! :)
Medvídek
Profil
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 *
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
pilec:
dík, určitě se na to podívám

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: