OOP oefen opdrachten
het nadenken in objecten dat leer je net door te experimenteren er mee, of verwacht je van iemand met geen ervaring dat hij een heel gebruikers systeempje in elkaar gaat steken? nee, ik ook niet, maar het kan wel eenvoudig zoals ik hier al eerder zei, als dat veel te simpel is om een registreer/login systeem te maken als beginner oefening dan heeft een reken machientje maken ook niet veel nut want dat is even simpel.
- Leg het verschil uit tussen een $this-> en een Self::
- wat is een abstract function?
- hoe kun je een functie overloaden?
Andy, we zijn het voor 3/4 met elkaar eens. Alleen jij bent van mening dat je moet beginnen met scripten als je begint met OO. Ik ben van mening dat je met je eerste experimenten geen script mag aanraken, eerst maar eens leren denken! :)
1:Als de class niet geinstantieerd wordt kun je geen gebruik van $this-> omdat $this-> naar de huidige object (class) verwijst. Met Self:: kun je de variabelen en functies binnenuit de class benaderen zonder dat de class is geinstantieerd.
2:Als het goed is, is een abstract functie een functie die je dwingt om die functie te gebruiken.
3:Ik weet niet zo goed of je met overloaden overriding methods bedoelt, ga ik wel van uit. dus als je 2 classes hebt met daarin de zelfde functies maar de ene functie moet wat anders doen dan de andere kan je er een if statement voor maken. Maar wil je hem niet overriding kun je in de else gebruike maken van parent class gevolgd met :: functienaam plus eventuele variablen dus vb: person::set_name($new_name);, maar je kan ook gelijk de functie van de parent gebruiken vb: parent::set_name($new_name);
Toevoeging op 22/10/2012 15:02:40:
Ik zal proberen de classe rekenen te herschrijven met een extend worteltrekken. Hierna zou ik dan wel een iets moeilijker voorbeeld willen te maken wat dan misschien iets meer met de OO gedachte heeft te maken. Maar weet niet of een gebruikers systeem direct gaat lukken.
Ik denk ook dat een gebruikers systeem te moeilijk is om mee te beginnen.
Ik ben zelf begonnen met een image class waarin ik images kan resizen en hier een aantal opties aan mee kan geven. Dit is vrij makkelijk te maken en je kunt hiervan redelijk veel leren over hoe je OOP kunt toepassen in je PHP script.
En als je ervoor kiest om in de plaats van meteen te gaan scripten eerst een aantal tutorials door te lezen kan ik je deze aanraden: http://net.tutsplus.com/tutorials/php/object-oriented-php-for-beginners/
Hier valt veel nuttige informatie uit te halen die je later kunt toepassen in eigen scripts.
Uit eigen ervaring raad ik je aan om eerst een aantal tutorials door te lezen om het basis principe te begrijpen en dan pas echt te beginnen met scripten.
Ik hoop dat je hier iets aan hebt.
http://www.sitemasters.be/forum/16/40632/Object_geori%C3%ABnteerd/OOP_oefen_opdrachten Het lijkt me niet meer nodig hier verder na te denken, aangezien daar een geweldig goed idee is gegeven.
En ook meneer Bham heeft op een ander forum zijn heil gevonden: Je kan best even nadenken over OO maar net als met autorijden: ooit zul je ook wel achter het stuur moeten gaan zitten, de snelweg op en invoegen. Als je dat zonder instructeur doet de eerste keer kan het goed fout aflopen.
Persoonlijk denk ik dat als je iemand zo snel mogelijk OO wil laten denken en doen dat een gedegen cursus het enigste is dat gaat helpen. En anders is het toch door schade en schande wijs worden.
met extends rekenen. (ik heb nog niet een if statment gebouwd in index.php om undefined errors te voorkomen) Maar ik denk dat ik iets fout doe.
In index.php post ik de values behalve die van wortel naar de class rekenen en dit doe
ik weer appart voor de class worteltrekken. IK dacht als ik een extend aanmaakt dat hij ook de
Methods en Properties erft van zijn parent. Maar nu heb ik in de class worteltrekken weer een getWortelValue en een showWortel functie.
Ik had ook eerst alle post gestuurd via de class rekenen, maar kon de waarde van wortel niet in de class worteltrekken krijgen en daarom heb ik het ook weer appart gedaan voor de class worteltrekken MAAR DENK DAT DIT NIET DE JUISTE AANPAK IS.
In de class worteltrekken kunt u onderaan een voorbeeld zien hoe ik dacht dat het moest. En in de functie setValues moet dan nog de waarde binnen komen van de post["wortel"]. IK had dit ook gedaan maar kreeg geen waarde uit de functie worteltrekken maar weet zo goed niet wat ik fout doe.
Index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>OOP oefenopdracht</title>
<?php include_once("classes/class_rekenen.php"); ?>
</head>
<body>
<?php
$rekenmachine = new Rekenen;
$bereken = $rekenmachine->setValues($_POST["waarde1"], $_POST["waarde2"], $_POST["operators"]);
$uitkomst = $rekenmachine->bereken();
$worteltrekken = new Worteltrekken;
$wortelvalue = $worteltrekken->getWortelValue($_POST["wortel"]);
$antWortel = $worteltrekken->showWortel();
?>
<h1>Class Rekenmachine</h1>
<p><?= (isset($uitkomst)? "Antwoord: ".$uitkomst : "") ?></p>
<p><?= (isset($antWortel)? "Uitkomst wortel: ".$antWortel : "") ?></p>
<p></p>
<hr />
<form method="post" action="">
<table border="0" cellspacing="0">
<tr>
<td>Inputfield</td>
<td><input type="text" name="waarde1" /></td>
<td><input type="text" name="waarde2" /></td>
</tr>
<tr>
<td>Operators</td>
<td><input type="radio" name="operators" value="+" />+</td>
<td><input type="radio" name="operators" value=":" />:</td>
</tr>
<tr>
<td></td>
<td><input type="radio" name="operators" value="-" />-</td>
<td><input type="radio" name="operators" value="x" />x</td>
</tr>
<tr>
<td>Worteltrekken √</td>
<td><input type="text" name="wortel" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="bereken" value="Bereken" /></td>
<td><input type="reset" name="wis" value="Wis" /></td>
</tr>
</table>
</form>
</body>
</html>
<html>
<head>
<meta charset="utf-8">
<title>OOP oefenopdracht</title>
<?php include_once("classes/class_rekenen.php"); ?>
</head>
<body>
<?php
$rekenmachine = new Rekenen;
$bereken = $rekenmachine->setValues($_POST["waarde1"], $_POST["waarde2"], $_POST["operators"]);
$uitkomst = $rekenmachine->bereken();
$worteltrekken = new Worteltrekken;
$wortelvalue = $worteltrekken->getWortelValue($_POST["wortel"]);
$antWortel = $worteltrekken->showWortel();
?>
<h1>Class Rekenmachine</h1>
<p><?= (isset($uitkomst)? "Antwoord: ".$uitkomst : "") ?></p>
<p><?= (isset($antWortel)? "Uitkomst wortel: ".$antWortel : "") ?></p>
<p></p>
<hr />
<form method="post" action="">
<table border="0" cellspacing="0">
<tr>
<td>Inputfield</td>
<td><input type="text" name="waarde1" /></td>
<td><input type="text" name="waarde2" /></td>
</tr>
<tr>
<td>Operators</td>
<td><input type="radio" name="operators" value="+" />+</td>
<td><input type="radio" name="operators" value=":" />:</td>
</tr>
<tr>
<td></td>
<td><input type="radio" name="operators" value="-" />-</td>
<td><input type="radio" name="operators" value="x" />x</td>
</tr>
<tr>
<td>Worteltrekken √</td>
<td><input type="text" name="wortel" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="bereken" value="Bereken" /></td>
<td><input type="reset" name="wis" value="Wis" /></td>
</tr>
</table>
</form>
</body>
</html>
Class
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
class Rekenen {
public $waarde1;
public $waarde2;
public $operator;
public $wortel;
/*
* $waarde 1: input waarde field 1
* $waarde 2: input waarde field 2
* $operator: +,-, x, :
* $wortel: input waarde wortel
*/
public function setValues($waarde1, $waarde2, $operator){
$this->waarde1 = $waarde1;
$this->waarde2 = $waarde2;
$this->operator = $operator;
}
public function bereken(){
if($this->operator == "+"){
$totaal = $this->waarde1 + $this->waarde2;
} elseif($this->operator == "-"){
$totaal = $this->waarde1 - $this->waarde2;
} elseif($this->operator == ":"){
$totaal = $this->waarde1 / $this->waarde2;
} elseif($this->operator == "x"){
$totaal = $this->waarde1 * $this->waarde2;
}
return $totaal;
}
}
class Worteltrekken extends Rekenen {
public function getWortelValue($valueWortel){
$this->wortel = $valueWortel;
}
public function showWortel(){
return sqrt($this->wortel);
}
}
// VOORBeeld hoe ik dacht de class worteltrekken te gebruiken
class Worteltrekken extends Rekenen {
public function getWortel(){
return sqrt($this->wortel);
}
}
?>
class Rekenen {
public $waarde1;
public $waarde2;
public $operator;
public $wortel;
/*
* $waarde 1: input waarde field 1
* $waarde 2: input waarde field 2
* $operator: +,-, x, :
* $wortel: input waarde wortel
*/
public function setValues($waarde1, $waarde2, $operator){
$this->waarde1 = $waarde1;
$this->waarde2 = $waarde2;
$this->operator = $operator;
}
public function bereken(){
if($this->operator == "+"){
$totaal = $this->waarde1 + $this->waarde2;
} elseif($this->operator == "-"){
$totaal = $this->waarde1 - $this->waarde2;
} elseif($this->operator == ":"){
$totaal = $this->waarde1 / $this->waarde2;
} elseif($this->operator == "x"){
$totaal = $this->waarde1 * $this->waarde2;
}
return $totaal;
}
}
class Worteltrekken extends Rekenen {
public function getWortelValue($valueWortel){
$this->wortel = $valueWortel;
}
public function showWortel(){
return sqrt($this->wortel);
}
}
// VOORBeeld hoe ik dacht de class worteltrekken te gebruiken
class Worteltrekken extends Rekenen {
public function getWortel(){
return sqrt($this->wortel);
}
}
?>
Gewijzigd op 23/10/2012 12:10:21 door Mr Beronne