Starten met OOP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick

patrick

17/10/2007 10:32:00
Quote Anchor link
Ik dacht gisteren laat ik een begin maken met het leren van OOP, aangezien ik het steeds vaker tegenkom.
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
class de_CLASS {
    __construct() {
         echo "Blub zei de vis ";
         echo "vanmiddag toen ik ";
         echo "naar huis liep";
    }
}

$obj = new de_CLASS();
?>


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.
 
PHP hulp

PHP hulp

25/12/2024 07:52:56
 
Frank -

Frank -

17/10/2007 10:36:00
Quote Anchor link
Zet nog even function voor je __construct.

Edit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
class de_CLASS {
    function
__construct() {
         echo "Blub zei de vis ";
         echo "vanmiddag toen ik ";
         echo "naar huis liep";
    }
}

$obj = new de_CLASS();
?>
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Patrick

patrick

17/10/2007 10:48:00
Quote Anchor link
@ pgFrank , ok de foutmelding is nu weg. Maar hoe roep je nu zo een object aan ? Dus zichtbaar de tekst : "Blub zei de vis toen ik vanmiddag naar huis liep"

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.
 
Jelmer -

Jelmer -

17/10/2007 10:50:00
Quote Anchor link
De constructor (__construct method dus) wordt automatisch aangeroepen waneer je een nieuwe instantie van de klasse maakt.

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?
 
Gerben Jacobs

Gerben Jacobs

17/10/2007 10:55:00
Quote Anchor link
Zover ik weet, is het ook meer de bedoeling om dingen terug te geven (return) dan in de classe zelf te echoën.

Dus bijv;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class de_CLASS {
    function
__construct() {
         $return = "Blub zei de vis ";
         $return .= "vanmiddag toen ik ";
         $return .= "naar huis liep";
         return $return;
    }
}

$obj = new de_CLASS();
echo $obj;
?>
 
Jan geen

Jan geen

17/10/2007 10:58:00
Quote Anchor link
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.
 
Patrick

patrick

17/10/2007 10:58:00
Quote Anchor link
@ Jelmer, ik heb gisteren zoveel over me heen gekregen bij het lezen. Functies zoals get_class() en is_subclass_of() , maar ook slapen en ontwaken __sleep() en __wakeup() die je weer kan gebruiken als je serialize() gebruikt. Parent en Child, overerving enz. enz. Maar ik snapte er geen hol van.

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.
 
Patrick

patrick

17/10/2007 11:02:00
Quote Anchor link
@ rik, gelukkig ben ik dus niet de enige. Voelde me eerlijk gezegd wel een ezel gisteravond.

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 ?
 
Jelmer -

Jelmer -

17/10/2007 11:04:00
Quote Anchor link
Die magic methods zoals __sleep & __wakeup, dat is inderdaad abracadabra. get_class() en serialize() ook. Dat is allemaal voor in een later stadium pas echt relevant.

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 -
 
Patrick

patrick

17/10/2007 11:15:00
Quote Anchor link
@ Jelmer, dus bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
class TweedeKamer {

var
$MinisterPresident;
var
$KamerVoorzitter;

}

?>


Zijn de ministerpresident en de kamervoorzitter dan instanties of werkt het anders ?
 
Jelmer -

Jelmer -

17/10/2007 11:22:00
Quote Anchor link
dat zijn properties, eigenschappen. Leuk voorbeeld overigens. $ministerPresident & $kamerVoorzitter zouden dan weer instanties van de klasse "Persoon" kunnen zijn, met de eigenschappen $initiaal, $voornaam, $achternaam.

TweedeKamer zou weer een method ontruim() kunnen hebben. Die doet dan bijvoorbeeld unset($this->ministerPresident); unset($this->kamerVoorzitter); :P
 
Gerben Jacobs

Gerben Jacobs

17/10/2007 11:24:00
Quote Anchor link
Zie dit niet als tutorial, want er zijn veel beter, maar gewoon als een mini-voorbeeldje.

Want zelf vind ik oefenen en proberen fijner leren dan uit een boek lezen. Gebruik ze eigenlijk alleen voor naslagwerk.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
?>
 
Bo az

Bo az

17/10/2007 11:32:00
Quote Anchor link
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.


Zie ook dit toppic.
Hier vind je mijn oplossing.
 
Jelmer -

Jelmer -

17/10/2007 11:33:00
Quote Anchor link
Kon het niet laten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();
?>


Je hebt trouwens wel minstens PHP versie 5 nodig om deze voorbeelden uit te voeren.
 
Kees Schepers

kees Schepers

17/10/2007 11:38:00
Quote Anchor link
Je zou wellicht ook kunnen kijken naar mijn tutorial: 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 :)
 
Patrick

patrick

17/10/2007 11:39:00
Quote Anchor link
@ Jelmer, ok dus als de ministerpresident en de kamervoorzitter eigenschappen zijn ookwel properties genoemd.

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?_
 
Patrick

patrick

17/10/2007 11:45:00
Quote Anchor link
Iedereen super bedankt, ik ga hier even mee aan de slag. Even wat in elkaar zetten en goed bekijken en vervolgens nog maar een keer proberen die 40 bladzijden begrijpend te lezen zodat ik er ook wat mee kan doen.

THNX allemaal !
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.