Het begin van het begin van OOP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Steven Hack

Steven Hack

02/11/2008 16:46:00
Quote Anchor link
Ik zat dus wat rond te kijken naar OOP na die geweldige tutorial van PHPErik over OOP. Maar wat me opvalt is dat veel tutorials meteen een hele hap code verklaren, en niet gewoon simpel beginnen. Dat kan ook aan mij en mijn zoekkunsten liggen, maar toch :o

Uit eindelijk heb ik dit stuk code in elkaar gezet, en ik weet 100% zeker dat dit toch wel zou moeten werken, maar het geeft steeds dezelfde error, namelijk:
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /monkey/OOP/pagina1.php on line 5

De code:
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
<?php

class Monkey
{
    public $name = 'aapjuh';
    public $gender = 'male';

  function
myInfo()
  {

    echo $this->name;
    echo $this->gender;
  }
}


myInfo();

?>


online voorbeeld: http://monkey.trabot.net/OOP/pagina1.php
 
PHP hulp

PHP hulp

23/12/2024 20:39:53
 

02/11/2008 16:55:00
Quote Anchor link
Het is:
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
<?php
class Monkey
{
    public $name = 'aapjuh';
    public $gender = 'male';

  function
myInfo()
  {

    echo $this->name;
    echo $this->gender;
  }
}


$blaat = new Monkey;
$blaat->myInfo();
?>

Verder vind ik dat die echo's niet in die functie's thuis horen, maar returns...
Kijk eens of je php 4 hebt, jou code is php5.
 
Steven Hack

Steven Hack

02/11/2008 16:58:00
Quote Anchor link
Hmm, heb idd php4, eens even overleggen of dat niet 5 kan worden. Bedankt. Maar scheeld php4 dan veel van php5, met het gebruik van codes? php 4 kan geen public, private etc toch? Meer weet ik niet echt van de verschillen, ik ga nu werken dus bekijk dat morgen wel.
 
Jelmer -

Jelmer -

02/11/2008 16:58:00
Quote Anchor link
Line 15 bij mij. Maar dat klopt. Jij roept de functie myInfo() aan. Maar die bestaat niet.

Wat je waarschijnlijk bedoelt is de method myInfo() van de class Monkey. Het verschil tussen een functie en een method is dat je een method altijd via een instantie aanroept. En een instantie is een object dat beschreven is door een class. :+

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

$mijn_aapje
= new Monkey();
$mijn_aapje->myInfo();

$ander_aapje = new Monkey();
$ander_aapje->gender = 'undecided';
$ander_aapje->myInfo();

// maar
$mijn_aapje->myInfo();
?>


Wanneer ik mijn_aapje aanmaak, stop ik een object dat beschreven is door de klasse Monkey in mijn leuke $mijn_aapje variabele. $mijn_aapje->myInfo() print dan effectief $mijn_aapje->name en $mijn_aapje->gender.

Nu maak ik nog een ander aapje aan, en daarvan verander in het gender. $ander_aapje is dus een ander aapje dan $mijn_aapje, het zijn beiden losse instanties van dezelfde klasse. Dus beiden hebben ze de eigenschappen $name en $gender, en de method myInfo, maar de inhoud van beiden is onafhankelijk. Dus $ander_aapje->myInfo() print een ander gender.

En om te laten zien dat $mijn_aapje niet aangepast is, print ik die nog een keer, en zie je dat die nog steeds hetzelfde is.

edit PHP 5 is een vereiste wanneer je fatsoenlijk met objecten wilt werken. Of lten we het zo zeggen, PHP 5 scheelt je een hoop kopzorgen wanneer je bezig gaat met OOP in PHP.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Henk PHP

Henk PHP

02/11/2008 17:24:00
Quote Anchor link
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php

class Monkey {
    
        public $name;
        public $gender;
        
        /// CONSTRUCTOR METEEN NAME EN GENDER SETTEN
        public function __construct($name, $gender){
            
            $this->set_name($name);
            $this->set_gender($gender);
        }

        
        public function set_name($name){
            
            $this->name = $name;
            
        }

        
        public function get_name(){
            
            return $this->name;
            
        }

        
        public function set_gender($gender){
            
            $this->gender = $gender;
            
        }

        
        public function get_gender(){
            
            return $this->gender;
            
        }

        
        public function get_info(){
            
            $info = array();
            $info['name'] = $this->get_name();    
            $info['gender'] = $this->get_gender();
            return $info;
        }
}
    

///// GENDER:
//// 0 = unknown, 1 = male, 2 = female


    function gender_convert($gender){
        
        if($gender == 0){
            return 'onbekend';
        }
elseif($gender == 1){
            return 'mannelijk';
        }
elseif($gender == 2){
            return 'vrouwelijk';
        }
    }


    $monkey_1 = new Monkey('Bertje', 1);
    $monkey_2 = new Monkey('Pietje', 1);
    $monkey_3 = new Monkey('Lisa', 2);
    
    
    echo '<b>Monkey 1:</b><br/>';
    echo 'Name: ' . $monkey_1->get_name() . '<br/>';
    echo 'Gender: ' . gender_convert($monkey_1->get_gender())  . ' (' . $monkey_1->get_gender() . ')<br/>';
    echo 'Array: <br/>';
    echo '<pre>';
    print_r($monkey_1->get_info());
    echo '</pre><br/><br/>';
    
    echo '<b>Monkey 2:</b><br/>';
    echo 'Name: ' . $monkey_2->get_name() . '<br/>';
    echo 'Gender: ' . gender_convert($monkey_2->get_gender())  . ' (' . $monkey_2->get_gender() . ')<br/>';
    echo 'Array: <br/>';
    echo '<pre>';
    print_r($monkey_2->get_info());
    echo '</pre><br/><br/>';
    
    echo '<b>Monkey 3:</b><br/>';
    echo 'Name: ' . $monkey_3->get_name() . '<br/>';
    echo 'Gender: ' . gender_convert($monkey_3->get_gender())  . ' (' . $monkey_3->get_gender() . ')<br/>';
    echo 'Array: <br/>';
    echo '<pre>';
    print_r($monkey_3->get_info());
    echo '</pre><br/><br/>';
    
    
    
    
?>


output:
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
Monkey 1:
Name: Bertje
Gender: mannelijk (1)
Array:

Array
(
    [name] => Bertje
    [gender] => 1
)



Monkey 2:
Name: Pietje
Gender: mannelijk (1)
Array:

Array
(
    [name] => Pietje
    [gender] => 1
)



Monkey 3:
Name: Lisa
Gender: vrouwelijk (2)
Array:

Array
(
    [name] => Lisa
    [gender] => 2
)


constructors zijn best handig ;)
 

02/11/2008 17:29:00
Quote Anchor link
Henk schreef op 02.11.2008 17:24:
constructors zijn best handig ;)

Dan kan je ook nog gebruik maken van setters en getters. Maar leuk dat je je oop kunsten hebt laten zien... Levert ook een groote bijdrage aan dit topic hé...
 
Ano Niem

Ano Niem

02/11/2008 17:29:00
Quote Anchor link
En als je nu later pas het gender wilt bepalen ;) Bijv mama monkey is zwanger en je maakt vast een baby monkey aan... maar je weet het geslacht nog niet en daardoor weet je ook nog geen naam te bepalen ^^

In je constructor zou ik dus
public function __construct($name ='', $gender ='') {
zetting ipv deze te verplichten ;)
 
Henk PHP

Henk PHP

02/11/2008 18:11:00
Quote Anchor link
Karl schreef op 02.11.2008 17:29:
Dan kan je ook nog gebruik maken van setters en getters. Maar leuk dat je je oop kunsten hebt laten zien... Levert ook een groote bijdrage aan dit topic hé...
Ik gaf gewoon een voorbeeld, ik kan er niets aan doen dat jij met het verkeerde been uit bed bent gestapt.

Sickness schreef op 02.11.2008 17:29:
En als je nu later pas het gender wilt bepalen ;) Bijv mama monkey is zwanger en je maakt vast een baby monkey aan... maar je weet het geslacht nog niet en daardoor weet je ook nog geen naam te bepalen ^^

Dan krijg je new Fetus(), dan is er nog geen Monkey ;)
Gewijzigd op 01/01/1970 01:00:00 door Henk PHP
 
Steven Hack

Steven Hack

03/11/2008 00:18:00
Quote Anchor link
Bedankt Henk! Dat bedoelde ik dus met de lap code die ik altijd meteen zie, maar gek genoeg snap ik deze wel. Zal er morgen eens mee aan de slag gaan.

Eerst ga ik eens php5 regelen, dat lijkt me wel zo handig. Maar heb in ieder geval al veel ideetjes om mee te testen. Harstikke bedankt iedereen!
 
Jan Koehoorn

Jan Koehoorn

03/11/2008 01:08:00
Quote Anchor link
Het is een onnodig om getter functies binnen de class aan te roepen zoals Henk doet. Die get_info memberfunctie kan net zo goed zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    public function get_info(){
        return array ($this->name, $this->gender);
    }

?>
 
PHP erik

PHP erik

03/11/2008 01:51:00
Quote Anchor link
Quote:
Het is een onnodig om getter functies binnen de class aan te roepen zoals Henk doet.
Niet helemaal mee eens. Het zou zomaar kunnen dat getName() een databasehandeling uitvoert (evt. in de toekomst) of de naam formatteert (evt. in de toekomst). Het kan nooit kwaad een getter te gebruiken.

Ik zou wel iedereen willen aanraden een standaard qua naamgeving te gebruiken zoals die van Zend of PEAR.
 
Henk PHP

Henk PHP

03/11/2008 13:08:00
Quote Anchor link
aapjuh schreef op 03.11.2008 00:18:
Bedankt Henk! Dat bedoelde ik dus met de lap code die ik altijd meteen zie, maar gek genoeg snap ik deze wel. Zal er morgen eens mee aan de slag gaan.

Eerst ga ik eens php5 regelen, dat lijkt me wel zo handig. Maar heb in ieder geval al veel ideetjes om mee te testen. Harstikke bedankt iedereen!

Misschien is het een idee om gewoon even WAMP op je pc te zetten. Kun je alvast op de localhost aan de slag met PHP5.
 
Steven Hack

Steven Hack

03/11/2008 23:21:00
Quote Anchor link
Heey verrek,

dat is slim Henk! Ik heb WAMP namelijk al, maar door dat ik een server host heb gebruik ik die altijd met ftp, wel zo makkelijk om meteen te uploaden :p
 
Joren de Wit

Joren de Wit

03/11/2008 23:28:00
Quote Anchor link
Quote:
wel zo makkelijk om meteen te uploaden
En tevens zo gevaarlijk aangezien je script waarschijnlijk direct voor iedereen te benaderen is? Oftewel een kwestie van een foutje over het hoofd zien en je hebt een potentieel lek gecreëerd.

Nee, test liever in een afgesloten omgeving waar niemand bij kan. Bij voorkeur een test server die hetzelfde geconfigureerd is als de productieserver.

ps. En die testserver kan natuurlijk ook gewoon localhost zijn ;-)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Steven Hack

Steven Hack

04/11/2008 10:00:00
Quote Anchor link
Klopt maar ik gebruik meestal een test. of /test/ plaats. En mijn scripts zijn nog niet zo gevaarlijk. Ik werk zelden met mysql of iets dergelijks.
Maar je hebt inderdaad gelijk als het om persoonsgegevens ofzo gaat, maar bij mij gaat het nog om onschuldige scripts.
 



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.