Starten met OOP
Ben dus begonnen te lezen in PHP5 complete handboek hoofdstuk over OOP, maar na 4 uur lezen over 40 bladzijden kan ik nog steeds de logica niet begrijpen. Ben dus vervolgens een tutorial hier gaan zoeken en vond er 1 van Sabastiaan.
Ik plak dus een stuk code uit het deel __construct en __destruct, namelijk deze:
Code (php)
Maar ik krijg deze foutmelding als ik de pagina vervolgens aanroep:
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' on line 3
Wat doe ik fout en waar kan ik het beste beginnen de rode draad van OOP door te krijgen.
Zal wel als een stomme vraag overkomen, maar hoop zo snel mogelijk door het allerbegin heen te zijn, zodat ik teksten die ik lees ook begrijpend tot me kan nemen.
Je weet toch dat een klasse een soort blauwdruk van een object is, en dat een instantie van klasse x een object is dat is opgebouwd volgens de blauwdruk van klasse x?
Dus bijv;
Quote:
maar na 4 uur lezen over 40 bladzijden kan ik nog steeds de logica niet begrijpen.
Als je het dan al zou begrijpen ben je echt een genie, ik heb er een paar maand over gedaan en heel wat meer pagina's doorgelezen voordat ik er überhaupt iets van snapte. veel succes.
Ik dacht als ik nou eerst zie wat er gebeurt en hoe je iets aanroept en weergeeft dan kan ik het misschien ook wat makkelijker lezen en begrijpen.
Quate:
Je weet toch dat een klasse een soort blauwdruk van een object is, en dat een instantie van klasse x een object is dat is opgebouwd volgens de blauwdruk van klasse x?
Is voor mij alweer abacadabra, werd gisteren gek van dit soort teksten.
Kreeg van een kennis van me de tip een C++ boek van Bjarne Stroustrup te lezen om meer inzicht in de geschiedenis van Objecten te krijgen. Maar om nou opeens een andere taal te gaan leren, terwijl ik PHP nog eerst door wil krijgen gaat me een beetje ver. Moet toch een andere methode zijn.
Hoe ben jij er uiteindelijk uitgekomen? Vooral veel lezen of meer doen ?
Wat je nu eerst moet begrijpen is wat een instantie is, wat 'extends' doet, en waneer je dat moet gaan gebruiken.
Een instantie van een klasse is als het ware een soort van waarde, net als een nummertje, of een string, maar dan eentje die zichzelf zo belangrijk voelt dat hij zijn eigen kapper, schoonmaker en nagelassistente heeft die onlosmakelijk aan hem verbonden zijn. * kuch * daarmee bedoel ik dus de methods.
Foutje Gerben: de constructor kan niets teruggeven, zij levert immers altijd al een instantie van de klasse op. Voor dit soort functionaliteit kan je beter naar functies gaan kijken.
edit: C++ is pas echt horror! dat is pas complex, de syntaxmogelijkheden, de dingen die je allemaal naar je hand kan zetten (je kan zelfs de betekenis van de + operator veranderen!) is mij ook een beetje te veel van het goeie.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Zijn de ministerpresident en de kamervoorzitter dan instanties of werkt het anders ?
TweedeKamer zou weer een method ontruim() kunnen hebben. Die doet dan bijvoorbeeld unset($this->ministerPresident); unset($this->kamerVoorzitter); :P
Want zelf vind ik oefenen en proberen fijner leren dan uit een boek lezen. Gebruik ze eigenlijk alleen voor naslagwerk.
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
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
<?php
class mijnEersteKlas {
const groen = "green";
public function __construct() {
$this->naam = get_class();
}
private function groenPrive() {
return "Prive: ".self::groen;
}
protected function groenProtected() {
return "Protected: ".self::groen;
}
public function groenPublic() {
return "Public: ".self::groen;
}
public function viaViaGroen() {
return self::groenProtected();
//return $this->groenProtected();
// Werkt allebei. MAAR niet samen. Je kan maar 1 keer 'return'en :)
}
}
$klas = new mijnEersteKlas;
echo $klas->naam;
//echo $klas->groenPrive(); //Fatal error: Call to private method mijnEersteKlas::groenPrive() from context
//echo $klas->groenProtected(); //Fatal error: Call to protected method mijnEersteKlas::groenProtected() from context
echo "<br />".$klas->groenPublic();
echo "<br />".$klas->viaViaGroen();
// Protected kan je dus wel via een function in een klasse doen, maar niet rechtstreeks
?>
class mijnEersteKlas {
const groen = "green";
public function __construct() {
$this->naam = get_class();
}
private function groenPrive() {
return "Prive: ".self::groen;
}
protected function groenProtected() {
return "Protected: ".self::groen;
}
public function groenPublic() {
return "Public: ".self::groen;
}
public function viaViaGroen() {
return self::groenProtected();
//return $this->groenProtected();
// Werkt allebei. MAAR niet samen. Je kan maar 1 keer 'return'en :)
}
}
$klas = new mijnEersteKlas;
echo $klas->naam;
//echo $klas->groenPrive(); //Fatal error: Call to private method mijnEersteKlas::groenPrive() from context
//echo $klas->groenProtected(); //Fatal error: Call to protected method mijnEersteKlas::groenProtected() from context
echo "<br />".$klas->groenPublic();
echo "<br />".$klas->viaViaGroen();
// Protected kan je dus wel via een function in een klasse doen, maar niet rechtstreeks
?>
patrick schreef op 17.10.2007 10:32:
Ben dus begonnen te lezen in PHP5 complete handboek hoofdstuk over OOP, maar na 4 uur lezen over 40 bladzijden kan ik nog steeds de logica niet begrijpen.
Ik denk dat je gewoon wat dingen moet gaan oefenen.
Quote:
Ik heb op school een opdracht gekregen die ik heel duidelijk vond en waarvan ik weet dat veel mensen door die opdracht een beetje OO zijn gaan snappen. De opdracht is voor Java, maar waarschijnlijk kan je in PHP wel iets maken wat er op lijkt.
Quote:
1.3. Beschouw de volgende eenvoudige versie van het spel Chuck-a-luck: Per ronde zet je een bedrag in op een geluksgetal van 1 tot 6 en vervolgens gooi je drie dobbelstenen. Als geen van de dobbelstenen dit geluksgetal aangeeft, dan ben je je inzet kwijt. In alle andere gevallen wordt uitbetaald afhankelijk van het aantal dobbelstenen dat het voorspelde aantal ogen weergeeft:
Overeenkomende dobbelstenen Uitbetaling
1 (een Single) 1:1
2 (een Double) 2:1
3 (een Triple) 10:1
Je begint met een saldo van 100. Als je alles hebt vergokt, dan kun je niet meer verder spelen.
De uitvoer zou je als volgt kunnen verzorgen:
ronde: 1
geluksgetal: 3
inzet: 5 worp: 3 5 3 saldo: 110
ronde: 2 geluksgetal: 3
inzet: 20
worp: 2 4 1 saldo: 90
ronde: 3
geluksgetal: 4
inzet: 10 worp: 4 4 4 saldo: 190
Maak in BlueJ drie klassen: Dobbelsteen, DobbelsteenTrio en ChuckALuckSpel. Bedenk zelf welke velden en methoden deze klassen nodig hebben. Implementeer de klassen en test het spel.
Opmerking: Probeer de klassen Dobbelsteen en DobbelsteenTrio zodanig te maken dat je ze ook in andere spelletjes kunt gebruiken.
Overeenkomende dobbelstenen Uitbetaling
1 (een Single) 1:1
2 (een Double) 2:1
3 (een Triple) 10:1
Je begint met een saldo van 100. Als je alles hebt vergokt, dan kun je niet meer verder spelen.
De uitvoer zou je als volgt kunnen verzorgen:
ronde: 1
geluksgetal: 3
inzet: 5 worp: 3 5 3 saldo: 110
ronde: 2 geluksgetal: 3
inzet: 20
worp: 2 4 1 saldo: 90
ronde: 3
geluksgetal: 4
inzet: 10 worp: 4 4 4 saldo: 190
Maak in BlueJ drie klassen: Dobbelsteen, DobbelsteenTrio en ChuckALuckSpel. Bedenk zelf welke velden en methoden deze klassen nodig hebben. Implementeer de klassen en test het spel.
Opmerking: Probeer de klassen Dobbelsteen en DobbelsteenTrio zodanig te maken dat je ze ook in andere spelletjes kunt gebruiken.
Zie ook dit toppic.
Hier vind je mijn oplossing.
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
56
57
58
59
60
61
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
56
57
58
59
60
61
<?php
class Kamer {
public
$voorzitter;
public function __construct()
{
// hier voor de sier :)
}
public function ontruim()
{
$this->voorzitter->schreeuw('Iedereen eruit');
unset($this->voorzitter);
}
}
class TweedeKamer extends Kamer {
public
$ministerPresident;
public function ontruim()
{
$this->ministerPresident->schreeuw('Help');
unset($this->ministerPresident);
parent::ontruim();
}
}
class Persoon {
public
$initiaal,
$voornaam,
$achternaam;
public function __construct($voornaam, $achternaam)
{
$this->voornaam = $voornaam;
$this->achternaam = $achternaam;
/* initaal is eerde letter van de voornaam */
$this->initiaal = $voornaam[0];
}
public function schreeuw($uitspraak)
{
echo $this->voornaam . ' roept: "' . $uitspraak . '!"';
}
}
$eersteKamer = new Kamer();
$eersteKamer->voorzitter = new Persoon('Yvonne Elisabeth Marie Antoinette', 'Timmerman-Buck');
$eersteKamer->ontruim();
$tweedeKamer = new TweedeKamer();
$tweedeKamer->voorzitter = new Persoon('Gerdi', 'Verbeet');
$tweedeKamer->ministerPresident = new Persoon('Jan Peter', 'Balkenende');
$tweedeKamer->ontruim();
?>
class Kamer {
public
$voorzitter;
public function __construct()
{
// hier voor de sier :)
}
public function ontruim()
{
$this->voorzitter->schreeuw('Iedereen eruit');
unset($this->voorzitter);
}
}
class TweedeKamer extends Kamer {
public
$ministerPresident;
public function ontruim()
{
$this->ministerPresident->schreeuw('Help');
unset($this->ministerPresident);
parent::ontruim();
}
}
class Persoon {
public
$initiaal,
$voornaam,
$achternaam;
public function __construct($voornaam, $achternaam)
{
$this->voornaam = $voornaam;
$this->achternaam = $achternaam;
/* initaal is eerde letter van de voornaam */
$this->initiaal = $voornaam[0];
}
public function schreeuw($uitspraak)
{
echo $this->voornaam . ' roept: "' . $uitspraak . '!"';
}
}
$eersteKamer = new Kamer();
$eersteKamer->voorzitter = new Persoon('Yvonne Elisabeth Marie Antoinette', 'Timmerman-Buck');
$eersteKamer->ontruim();
$tweedeKamer = new TweedeKamer();
$tweedeKamer->voorzitter = new Persoon('Gerdi', 'Verbeet');
$tweedeKamer->ministerPresident = new Persoon('Jan Peter', 'Balkenende');
$tweedeKamer->ontruim();
?>
Je hebt trouwens wel minstens PHP versie 5 nodig om deze voorbeelden uit te voeren.
http://www.phphulp.nl/php/tutorials/8/302/
Het gaat er namelijk juist niet om dat je de OO syntax van PHP kent (want die heb je zo onder de knie) maar juiste het prinsiepe van OOP zelf. Je moet het nut ervan begrijpen, waarom zou ik het gebruiken? Wat levert het mij op? Realistische voorbeelden ? Etc.
Succes met het leren van OOP, zal het topic in de gaten houden :)
Je zou wellicht ook kunnen kijken naar mijn tutorial: Het gaat er namelijk juist niet om dat je de OO syntax van PHP kent (want die heb je zo onder de knie) maar juiste het prinsiepe van OOP zelf. Je moet het nut ervan begrijpen, waarom zou ik het gebruiken? Wat levert het mij op? Realistische voorbeelden ? Etc.
Succes met het leren van OOP, zal het topic in de gaten houden :)
Hoe koppel je deze eigenschappen aan de instantie (persoon) en ga je vervolgens weer andere eigenschappen/properties toevoegen (voornaam, kleur_haar etc.) ?
Methods() zijn neem ik aan de functies die je vervolgens in het object maakt?_
THNX allemaal !