Jump to content
php.lv forumi

apstrade ar oop


Gacha

Recommended Posts

Iedvesmojoties no Offtopic->slipetajs es ar bik gribu pamocīt to OOP. To oop ideju, kā tādu es beidzot esmu aptuveni sapratis, lasot php.net es izveidoju savu pirmo oop klasi :D

<?php
Class tests
{
var $x;

 function pluss($sk, $cik){
   $this->x = $sk + $cik;
   return $this->x;
 }
 
 function minus($sk, $cik){
   $this->x = $sk - $cik;
   return $this->x;
 }
 
}

$klase = new tests;
echo $klase->pluss(10, 5).'<br />';
echo $klase->minus(10, 5).'<br />';
?>

Un pat strādā, bet protams ir daži jautājumi:

No php-dev.lv: Mainīgais $this ir atsauce iekšējo objektu – to, kurā attiecīgais mainīgais pats atrodas...
Nu man nesaprast, ka šitādā mēle ir uzrakstīts paskaidrojums es vispār no tā raksta neko daudz nesapratu kaut vai tas ir latviski, vairāk uzzināju no php.net kur ir angliski, bet paskaidrots normāli ar loģiku, nevis ar daiļrunību :)

 

Nu tad tā, cik nopratu tad tas $this ir tas mainīgais, ko iesūtu klasē un visu laiku apstrādāju. Itkā saprotu, kas ir tas $x, bet gribētos zināt, kā tos VAR pareizi izmantot, lai tie būtu noderīgi un ko intresantu ar tiem varētu darīt.

 

Lai es vairāk kaut ko saprastu, tad kāds man varētu palīdzēt izveidot vienkāršu testa klasi. Doma ir iesūtīt klasē textu un to apstrādāt ar => trim(), addslashes(), htmlspecialchars() un pieņemsim visus 5niekus pārveidot par vārdiem :) Bet ja varat, tad tā, lai saprotu :)

Link to comment
Share on other sites

Ja esi ņēmies ar pascal record'iem:

type rec = record

x: integer;

end;

 

proedure do_something(var this: rec; y: integer);

begin

this.y := 10;

end;

 

Tātad tam this nozīme, ka tu izsaucot klases metodi, jāzin uz kuru objektu (konkrētu instanci), izsaukums attiecās, jo šinī gadījumā tu vari nodefinēt divus rekordus:

 

var

a, b: rec;

 

do_something(a, 1); // this = a

do_something(b, 2); // this = b

 

Tava demo klase:

class test
{
  var $text;
  function test($text = '') // konstruktors
  {
    $this->$text = $text;
  }

  function apstrade() // trimo un slesho
  {
    $this->text = addslashes(trim($this->text));
  }

  function convert() // 5 -> pieci
  {
    $this->text = str_replace('5', 'pieci', $this->text);
  }
}

// piemērs
$a = new test('tral a lā 5  ');
echo $a->text;  // apskatamies kas ir sākumā
$a->apstrade();
echo $a->text;  // apskatamies kas iznācis
$a->convert();
echo $a->text; // apskatamies kas iznācis
$a->text = 'cic text';
echo $a->text; // apskatamies kas iznācis

Edited by bubu
Link to comment
Share on other sites

ja ir 2 klases, tad katraa var buut mainiigie ar vienaadiem nosaukumiem.

 

class pirmaa {

var $i = 5;

}

 

class otraa {

var $i = 6;

}

 

pirmaa::i == 5

otraa::i == 6

 

$this

 

class pirmaa {

var $i = 5;

function Funkcija() {

// lai izmantoto mainiigo jaaraksta

$this->i++;

echo $this->i;

// tas pats jaadara ja grib izsaukt klases funkciju

$this->Funkcija2(); /// shitaa funkcija nav nodefineeta err

}

}

Link to comment
Share on other sites

Tnx jums abiem par piemēriem, tagad man ir skaidrs apmēram tik daudz lai kaut ko noderīgu varētu izveidot. Tagad tik japatrennējas un gan jau ar laiku tā lieta aizies :)

Link to comment
Share on other sites

Nu reku mēģinu uztaisīt klasi, kuru domāju izmantot datu ievietošanai un izvadišanai no DB.

Class filtrs {
 var $data;
 var $opt;
 
function filtrs(){
 $this->data = '';
 $this->opt = '';
}
function db_in(){
 $this->data = trim($this->data);
 $this->data = addslashes($this->data);
}
function db_out(){
 $mas = explode(' ',$this->opt);

	 if(in_array('bbcode', $mas)){
   $this->data .= ' bbcode';
	 }
	 if(in_array('html-on', $mas)){
   $this->data .= ' html-on';
	 }	
	 if(in_array('html-off', $mas)){
   $this->data .= ' html-off';  
	 }
	 if($this->opt == '' || in_array('main', $mas)){
   $this->data .= ' main_filter';  
	 }
}

}
$klase = new filtrs;
$klase->data = 'Tiek izmantoti šādi filtri: ';
$klase->opt = 'bbcode html-on main';
$klase->db_out();
echo $klase->data;

Itkā viss iet, tik gribēju zināt vai ko nedaru nepareizi, vai lieki. Varbūt kaut ko būtu labāk darīt savādāk. Vēl man intresē tie konstruktori, sapratu to aptuveno jēgu, bet ko vēl labu var ar tiem darīt?

 

Un kas vēl OOP ir tāds specifisks? pagaidām zinu $this un konstruktori.

Edited by Gacha
Link to comment
Share on other sites

It kā jau klasi šādām vienkāršām darbībām īsti jēgas nav rakstīt, bet varēt jau var. Tev jāpadomā kā šo klasis sasaistīt ar citām tavām klasēm - datu izvilkšanu / ielikšanu DB, attēlošanu HTML kodā. Pašlaik par to es neko nevaru spriest, jo nav nekas :) Konstrukori ir vajadzīgi tikai tāpēc, lai varētu inicializēt klases mainīgos ar sākotnējām vērtībām / atvērt konekciju uz DB / atvērt failus, u.c. tāda vaida inicializācijas.

 

Vēl viena spcifiska OOP lieta ir mantošana, kad tu paplašini klases funkcionalitāti veidojot jaunu klasi no dotās + liektot klāt papildus fjas / mainīgos (extends keywords)

Link to comment
Share on other sites

Nu es domāju, kad pabeigšu šo klasi ar visu ko tai domāju likt iekšā tā būs pietiekami liela :) Bet pagaidām ma ir svarīgi izveidot jebkādu klasi. Man šķiet, ka klases ir javeido atsevišķām lietām piemēram šādai apstrādei, mysql un vēl kaut kam, bet domāju, ka pilnībā kodēt tikai ar OOP nav labi.

 

Un par to extended kaut ko dzirdeju, bet pagaidām vel neiebraucu, bet kad būs vajadzīgs tad jau sapratīšu.

Link to comment
Share on other sites

Man atkal liekas tieši otrādi. Kautkādu datu kovertācijai / apstrādei (vienkāršai) es lietoju funkcijas. Bet tieši datu sasaistei db <-> html es lietotu OOP. Jo oop jau pēc būtības nav īsti jēgas, ja ir tikai viens triviāls objekts. Pielietojot agregācijas var veidot diezgan sarežģītas un mērogojamas (fleksibilitāte?) sistēmas. Bet nu katrs jau nonāk pie saviem secinājumiem un lietot to, kas pašam liekās ērtāks.

Link to comment
Share on other sites

brīdī, kad būsi daudz maz apguvis OOP un tā iespējas, sapratīsi, ka PHP gadījumā pilnīgs OOP ir bezjēdzīgs - notiek lieka lietu sarežģīšana vismaz PHP4 gadījumā pilnīgi noteikti.

Link to comment
Share on other sites

  • 1 month later...
brīdī, kad būsi daudz maz apguvis OOP un tā iespējas, sapratīsi, ka PHP gadījumā pilnīgs OOP ir bezjēdzīgs - notiek lieka lietu sarežģīšana vismaz PHP4 gadījumā pilnīgi noteikti.

Heh... nu var jau katram projektam rakstiit savu klasi $application, kuraa tad sabaazst visas "briivaas" fjas un "briivos" mainiigos. Viens pluss tam ir - nav jaadomaa tik daudz, ka tik neaizmirst kaadaa fjaa nodefineet kaadu globaalo mainiigo. Neesmu gan nekad taa dariijis :) Tas veel vareetu atmaksaaties, ja taisa lielu intraneta aplikaaciju priesh nedaudziem lietotaajiem. Bet, ja jaataisa intensiivas lietoshanas web-aplikaaciju, tad gan naakas atgriezties pie vecajaam labajaam f-jaam un centiigi piedomaat, pie katras i/o operaacijas.

Link to comment
Share on other sites

×
×
  • Create New...