Gå til innhold

Lære å kode OOP


Anbefalte innlegg

Videoannonse
Annonse

Lokaltog: Man har et budsjett og det er ikke alle som har fast inntekt.

Men jeg tviler ikke et sekund på at den er verdt hver krone, men det er da også en del andre ting som kan koste flere tusen, men man kjøper de fremdeles ikke før man er sikker på at man har råd ;)

 

Men jeg skal nå prøve å få tak i boka.

Lenke til kommentar

Jeg er ikke broren til fyren som har et navn som ligner på stekepanne ( Som jeg vet om.. )

 

Prøvde meg på en ting jeg kom på helt selv nå( borsett fra de 2 siste linjene )

 

<?php

class kake {

function kake2() {

$this->variabel = "Test";

echo $this->variabel;
}


}

$a = new kake();
$a->kake2();
?>

 

Så må virkelig

 

$a = new kake();

$a->kake2();

 

til for å få printet ut values?

om man koder med OOP så blir det jo bare MER kode?

Endret av Eivind218
Lenke til kommentar
om man koder med OOP så blir det jo bare MER kode?

Målet med objektorientert programmering er ikke å skrive mindre kode, men å skrive kode som er isolert og gjenbrukbar, i tillegg til at den er enklere å vedlikeholde. I mange tilfeller vil nok OOP medføre flere tastetrykk på kort sikt, men i så å si alle tilfeller vil det gi langt færre tastetrykk over tid. :)

 

Selvfølgelig er det heller ikke all kode som egner seg i et objekt i PHP. Eksemplet ditt er et slikt tilfelle; hvis alt du skal gjøre er å printe ut "test", så er det åpenbart at det er overflødig å wrappe et objekt rundt den koden. Men om du skal lage litt mer omfattende ting som et databaserammeverk, en parser, en gjestebok, etc., så vil det være langt mer fornuftig å bruke klasser/objekter for å organisere koden din.

Endret av Lokaltog
Lenke til kommentar

Dette er første OOP scriptet jeg har laget:

 

<?php

/*
  sjekker diverse ting
*/
class Sjekker {

/* setter opp alternativer */

private $valg1 = '1';
private $valg2 = '3';
private $valg3 = '5';
private $valg4 = '10';

/* tiden som er på de forskjellige alternativene (bunker) */

private $tid1 = '3600'; /* 1 time */
private $tid2 = '7200'; /* 3 timer */
private $tid3 = '18000'; /* 6 timer */
private $tid4 = '32400'; /* 10 timer */	

/* lager funksjonene */

final public function bunker($value1,$value2,$value3) {
	include 'inc/klasser/bunker_sjekk.php';
}

final public function fengsel($value1,$value2) {
	/* sjekk fengsel */
}

}

?>

 

Hva synes dere? :p

 

 

		if( $value1 == $this -> valg1 ) {

		$time = time()-$this->tid1;

			if($time < $value2) {
				$tid2 = date ( "i" , $value2 - $time );
				$tid3 = date ( "s" , $value2 - $time );
				echo "<span class=\"info2\">
					  <strong>Du er i bunker</strong>! 
				Du må vente i <strong>$tid2</strong> minutter og <strong>$tid3</strong> sekunder.
					  </span><br>";
			} else {
				mysql_query("DELETE FROM bunker WHERE id = '$value3'");
			}

	}

 

Lenke til kommentar

Målet er (som tidligere nevnt) å skrive tryggere, enklere og mindre kode. Se for deg en Pong-klone (dataspill). For de to spillerne i spillet ville man uten objektorientert programmering måttet gjøre noe slik:

int playerOneX;
int playerOneY;
sprite playerOneSprite;
string playerOneName;

int playerTwoX;
int playerTwoY;
sprite playerTwoSprite;
string playerTwoName;

 

Dette blir fort uoversiktlig, og det er lett å gjøre feil. Med en 'spiller'-klasse derimot, er det i tillegg til å løse problemet enkelt å inkludere enda flere spillere.

Class Player
{
  int X;
  int Y;
  sprite Sprite;
  string Name;
}

Merk at det ikke er fornuftig å bruke en klasse om ikke spillerne trenger å være mer komplekse enn dette. En struct gir mer mening så lenge man bare syr sammen data, da de opprettes på stakken (fritt etter engelsk), og ikke på haugen (også fritt etter engelsk). Det er mulig at dette ikke gjelder for PHP.

 

Endring:

En fyr på XGameStation-forumet har en flott blogg. Han postet for ikke lenge siden denne introduksjonen i OOP.

Endret av phfjeld
Lenke til kommentar
Så må virkelig

 

$a = new kake();

$a->kake2();

 

til for å få printet ut values?

om man koder med OOP så blir det jo bare MER kode?

 

Nå har du brukt Kake klassen ett sted, og Kake objektet er veldig simpelt.

 

Et bedre eksempel på hva objektorienter programmering kan gjøre for deg er når du f.eks kan hente ut en rad fra databasetabellen Order, vise dataene, endre objektet og senere i transaksjonen kan du lagre objektet tilbake i databasen ved å skrive f.eks:

 

Order order = session.load(Order.class, 1);
...visning og henting av data her...
order.setCustomerDescription("test");
session.saveOrUpdate(order);

Uten å måtte skrive en eneste linje SQL.

 

Typisk ikke-objektorientert PHP kode ville vel vært noe sånt som

 

$query=" SELECT * FROM contacts WHERE id='$id'";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
$i=0;
while ($i < $num) {
$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
$mobile=mysql_result($result,$i,"mobile");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");
...visning og henting av data her...
$query = "UPDATE contacts SET first = '$ud_first', last = '$ud_last', phone = '$ud_phone', mobile = '$ud_mobile', fax = '$ud_fax', email = '$ud_email', web = '$ud_web' WHERE id = '$ud_id'";

 

Ganske sikker på at den første varianten er lettere å skrive, lese, debugge og vedlikeholde enn den andre varianten... :)

 

(Eksempelet er Java kode med Hibernate som Object Relation Mapper (ORM). Grunnen til at eksempelet er i Java og ikke PHP er at jeg ikke kan kode PHP, men Java.)

Endret av blackbrrd
Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...