Kristabs Posted August 30, 2006 Report Posted August 30, 2006 (edited) Es nevaru pats izdomāt kā būtu pareizi kodēt OOP. Piemēram, ziņu iegūšanai no DB. Ir piemēram ziņas un katrai ziņai ir Virsraksts, Bilde, Teksts. Pēc kāda principa būtu vispareizāk taisīt klasi, ja vajadzēs piemēram pēdējo vienu ziņu, pēdējās trīs un visas un no dažādām kategorijām. Visvieglāk lietojamais variants man nāk prātā: //Bishkji biju savaadaak domaajis savaa piemeeraa, izlaboju class News{ var $ids; function get_last_news_ids($category, $limit){ $this->ids = array('2','23','43'); } function get_news_info_by_id(){ //get by $this->ids; from db $news['title']; $news['foto']; $news['text']; return $news; } } Bet šajā variantā ir uz katru ziņu viens selekts. Iesakiet labu un ērti lietojamu variantu. Edited August 31, 2006 by Kristabs
v3rb0 Posted August 30, 2006 Report Posted August 30, 2006 ja tiešām gribi ar oop, tad taisi 2vas klases. klasi ziņai. un factory klasi, ar kuru velc ārā ziņas no db un taisi vienu vai veselu masīvu ar ziņu klases instancēm.
bubu Posted August 30, 2006 Report Posted August 30, 2006 Kāda jēga no klases, ja tajā nav mainīgo? Klase jau vajadzīga, ja tajā ir mainīgie. Ja nav mainīgo, tad no klases nav nekādas jēgas. Pietiek ar prastām fjām.
john.brown Posted August 30, 2006 Report Posted August 30, 2006 (edited) Atvainojos par garo penteri, bet jēga tam būtu apm. tā: class News { private $id = NULL; private $title = NULL; private $foto = NULL; private $text = NULL; private $cat_id = NULL; private $date = NULL; public function set($key,$value) { if(isset($this->$key)) { $this->$key = $value; } } public function get($key) { if(isset($this->$key)) { return $this->$key; } } public function fill($row) { foreach($row as $key => $value) { $this->set($key,$value); } } } class NewsMapper { public function find($id) { $res = mysql_query("SELECT * FROM news WHERE id=$id"); $row = mysql_fetch_array($res); $news = new News(); $news->fill($row); return $row; } public function findByCategorie($cat_id,$ofset = 0,$limit = 10,$order = 'date') { // te dabonam ziņas kategorijai // atgriežam kā objektu massīvu } public function findByDate($date_no,$date_lidz) { // te dabonam ziņas pēc dauma // atgriežam kā objektu massīvu } public function save(News $news) { // te saglabājam ziņu datubāzē } } $zinuMappers = new NewsMapper(); // atrodam ziņu pēc id $zina = $zinuMappers->find($zinasId); // dabonam ziņas kategorijā $zinas_kategorija = $zinuMappers->findByCategorie($cat_id); // dabonam ziņas noteiktā laika periodā $zinas_pec_laika = $zinuMappers->findByDate($datums_no,$datums_lidz); // izmainam ziņu un saglabājam $zina->set('title','Jauns virsraksts'); $zinuMappers->save($zina); Protams, tik kā ilustrācija. Lasi par design patterns un oop pamatiem Edited August 31, 2006 by john.brown
Delfins Posted August 31, 2006 Report Posted August 31, 2006 (edited) Es atkārtošos ar savu piemēru: class MyTable { function initFromData( $postData ) { $this->newData-> ... } function insert() {} function update() {} function initFromDb( $id ) { $this->data-> ... } } Šis te bija ~`Model ` Plus papildus var uztaisīt klasi, kas māk `nodizainēt` (~`View`) a Controlieri var rakstīt kā vēlies un kad vēlies, jo tā jau ir MVC priekšrocība, jo tiek atdalītas loģikās daļas... Edited August 31, 2006 by Delfins
konrads Posted August 31, 2006 Report Posted August 31, 2006 Atvainojos par garo penteri, bet jēga tam būtu apm. tā:class News { private $id = NULL; private $title = NULL; private $foto = NULL; private $text = NULL; <snip-snip/> J. Brūnais visu īsuma pateica preizi :) Reku links vispārizglītojošā virzienā par krisab'a oriģinālo jautājumu:Object Relational Mapping (ORM) Lai atvēsināt iztēli, jāpiebilst, ka gandriz visi ORM sucks, un katrs programmētajs parasti uzskata par goda lietu uztaisīt savu, labāku. Iesaku pasmelties idejas no Java HibernateIekš PHP nopietnākais ORM ir Propel .
v3rb0 Posted August 31, 2006 Report Posted August 31, 2006 nu par hibernate diez vai kāds tā vienkārši goda dēļ kaut ko savu labāku uztaisīs. :)
goldy Posted August 31, 2006 Report Posted August 31, 2006 saspiedušies jau visi ir ar OOP, bāž kur vajag un biežāk gan kur nevajg. tač tavām vajdzībām pietiek ar vienu mazu funkciju kura apstrādā viena maza kverija datus, kur tu tur vēl klasi liksi? kad vienreiz sapratīsies, ka OOP jēga parādās tikai tad, ja to uztaisa fleksiblu, var bez sāpēm nēsāt no viena projekta uz otru un bez nekādām izmaiņām to tur pielietot, a ko šeit? gribēsi bildīti zemāk, rakstīsi jaunu klasi, vai manīsi esošo?
Delfins Posted August 31, 2006 Report Posted August 31, 2006 goldy, a moš tas viņam ir pirmais projekts, un šito klasi izmantos citos projektos?! Vēlāk vēl apkarinās ar visādām lietām... Tu vnk padaudz `uzbrauci`... tikpat labi var katram pretī ejošam smēķētajam bļau - "nafig pīpēt, tas tači neveselīgi"... a vot, katrs trešais tagad ir pīpmanis... Tāpēc arī var daudz strīdēties, kur OOP ir `īstais` un kur `mēsls`... gaumes lieta... tomēr, kas attiecās uz PHP un Engine-based saitiem, tad OOP tur dara savu darbu uz visiem 200%... piemērs: klase `ZinjuViews` labi saprotās ar klasēs `ProduktuZinjas` un `SaitaZinjas`... product.php: $nl = new NewsList(); $nV = new NewsView($nl); $nV->draw(); news.php: $pnl = new ProdNewsList(); $nV = new NewsView($pnl); $nV->draw();
john.brown Posted August 31, 2006 Report Posted August 31, 2006 2 goldy kad vienreiz sapratīsies, ka OOP jēga parādās tikai tad, ja to uztaisa fleksiblu, var bez sāpēm nēsāt no viena projekta uz otru un bez nekādām izmaiņām to tur pielietot Bet tā jau ar ir. Sāc rakstīt oop, pielietot design patterns, un pēc kāda laika jauns projekts sākas ar to, ka tu kopē folderī klašu "skeletu", un pieliec klāt tik atsevišķas ekstensijas pamat klasēm :) Rakstīt kļūst jauki un patīkami :P Bez tam koda pavadīšana iekš oop ir daudz reālāka, kā procedūrās - tu pilnīgi noteikti zini, kur kas atrodas, nekādu rakšanos caur libiem, tipa "ar kur es to funkciju iebāzu"... Nē, kad esi iebraucis iekš oop kaifiem, atteikties no tiem vairs negribas :)
KAC Posted August 31, 2006 Report Posted August 31, 2006 man ir paaris faili biezhaak lietotajaam f-jaam, viss paareejais tiek savaa ierastajaaa struktuuraa izvietots, viss notiek aatri, eerti un kaifiigi. nekaa lieka, nekaada oop.
Zoom Posted September 2, 2006 Report Posted September 2, 2006 (edited) Atļaušos uzprasīt. Kā saprast pirms funkcijas un manīgiem public un private? Edited September 2, 2006 by Zoom
bubu Posted September 2, 2006 Report Posted September 2, 2006 RTFM. http://www.php.net/manual/en/language.oop5.visibility.php class XX { public $PUB = 1; private $PRIV = 1; function xx() { echo $this->PUB, $this->PRIV; // šādi var } }; $x = new XX(); echo $x->PUB; // var echo $x->PRIV; // nevar
Kristabs Posted September 2, 2006 Author Report Posted September 2, 2006 class Klase{ private $priv; public $pub; public functio get_var(){ return $this->$priv; } private function get_var2(){ return $this->$pub; } } $k = new Klase(); echo $k->$priv; echo $k->get_var(); echo $k->get_var2();
Zoom Posted September 2, 2006 Report Posted September 2, 2006 Thx. Es vnk nezināju kur meklēt. Meklēju pie funkcijām (augšā search), bet neko tādu neatradu tāpēc prasīju.
Recommended Posts