Jump to content
php.lv forumi

Recommended Posts

Posted (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 by Kristabs
Posted

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.

Posted

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.

Posted (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 by john.brown
Posted (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 by Delfins
Posted
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 Hibernate

Iekš PHP nopietnākais ORM ir Propel .

Posted

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?

Posted

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

Posted

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 :)

Posted

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.

Posted (edited)

Atļaušos uzprasīt. Kā saprast pirms funkcijas un manīgiem public un private?

Edited by Zoom
Posted

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

Posted

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.

×
×
  • Create New...