Het begin van het begin van OOP
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)
online voorbeeld: http://monkey.trabot.net/OOP/pagina1.php
Code (php)
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.
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.
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)
1
2
3
4
5
6
7
8
9
10
11
12
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();
?>
$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 -
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
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
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/>';
?>
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)
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
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
)
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 ;)
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é...
In je constructor zou ik dus
public function __construct($name ='', $gender ='') {
zetting ipv deze te verplichten ;)
Karl schreef op 02.11.2008 17:29:
Ik gaf gewoon een voorbeeld, ik kan er niets aan doen dat jij met het verkeerde been uit bed bent gestapt.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é...
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
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!
Quote:
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.Het is een onnodig om getter functies binnen de class aan te roepen zoals Henk doet.
Ik zou wel iedereen willen aanraden een standaard qua naamgeving te gebruiken zoals die van Zend of PEAR.
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!
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.
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
Quote:
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.wel zo makkelijk om meteen te uploaden
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
Maar je hebt inderdaad gelijk als het om persoonsgegevens ofzo gaat, maar bij mij gaat het nog om onschuldige scripts.