OOP functie
Ik ben net begonnen met OOP in php, alleen ik stuiter op een probleempje ik heb de volgende code om een object te maken en te laten zien op de pagina:
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
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
<?
class persoon { //de naam van de class
//de 3 eigenschappen van de persoon
public $naam;
public $lftd;
public $brp;
// hieronder staan de methodes
public function geef_naam(){
return $this->naam;
}
public function bepaal_naam($nieuwenaam){
$this->naam = $nieuwenaam;
}
//------
public function geef_lftd(){
return $this->lftd;
}
public function bepaal_lftd($nieuwelftd){
$this->lftd = $nieuwelftd;
}
//------
public function geef_brp(){
return $this->brp;
}
public function bepaal_brp($nieuwebrp){
$this->brp = $nieuwebrp;
}
}
//nieuwe objecten maken
$a = new persoon();
$a -> bepaal_naam('Annemieke');
$a -> bepaal_lftd('45');
$a -> bepaal_brp('webdeveloper');
$b = new persoon();
$b -> bepaal_naam('Anne');
$b -> bepaal_lftd('56');
$b -> bepaal_brp('gamedeveloper');
//de methode gebruiken
echo "<table border='0' width='200' border='1'>";
echo " <tr bgcolor='#00FF00'>";
echo " <td>Naam</td>";
echo " <td>Leeftijd</td>";
echo " <td>Beroep</td>";
echo "</tr>";
echo "<tr>";
echo "<td>".$a->geef_naam()."</td>";
echo "<td>".$a->geef_lftd()."</td>";
echo "<td>".$a->geef_brp()."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>".$b->geef_naam()."</td>";
echo "<td>".$b->geef_lftd()."</td>";
echo "<td>".$b->geef_brp()."</td>";
echo "</tr>";
echo "</table>";
?>
class persoon { //de naam van de class
//de 3 eigenschappen van de persoon
public $naam;
public $lftd;
public $brp;
// hieronder staan de methodes
public function geef_naam(){
return $this->naam;
}
public function bepaal_naam($nieuwenaam){
$this->naam = $nieuwenaam;
}
//------
public function geef_lftd(){
return $this->lftd;
}
public function bepaal_lftd($nieuwelftd){
$this->lftd = $nieuwelftd;
}
//------
public function geef_brp(){
return $this->brp;
}
public function bepaal_brp($nieuwebrp){
$this->brp = $nieuwebrp;
}
}
//nieuwe objecten maken
$a = new persoon();
$a -> bepaal_naam('Annemieke');
$a -> bepaal_lftd('45');
$a -> bepaal_brp('webdeveloper');
$b = new persoon();
$b -> bepaal_naam('Anne');
$b -> bepaal_lftd('56');
$b -> bepaal_brp('gamedeveloper');
//de methode gebruiken
echo "<table border='0' width='200' border='1'>";
echo " <tr bgcolor='#00FF00'>";
echo " <td>Naam</td>";
echo " <td>Leeftijd</td>";
echo " <td>Beroep</td>";
echo "</tr>";
echo "<tr>";
echo "<td>".$a->geef_naam()."</td>";
echo "<td>".$a->geef_lftd()."</td>";
echo "<td>".$a->geef_brp()."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>".$b->geef_naam()."</td>";
echo "<td>".$b->geef_lftd()."</td>";
echo "<td>".$b->geef_brp()."</td>";
echo "</tr>";
echo "</table>";
?>
Alleen wil nu een formulier er bij maken om naam, leeftijd en beroep in de tabel in te voegen, maar de moeilijkheid is juist dat de functie de objecten ook moet onthouden om de pagina te kunnen refreshen...
Ik hoop zo snel mogelijk op een oplossing;)
groetjes!
- begin een classnaam met een hoofdletter, dus Persoon
- script in het engels, dit is algemeen. Dus:
- getallen zijn getallen, geen strings. Gebruik dus 12 en niet '12'
- Maak properties niet public. Dan kan je ze altijd aanpassen en dat wil je niet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
class Person
{
public $name;
public function setName( $name )
{
$this->name = ucfirst($name); // zorg dat de naam altijd met een hoofdletter begint
}
public function getName()
{
return $this->name;
}
}
$wouter = new User;
$wouter->setName('wouter');
echo $wouter->getName(); // Wouter
$wouter->name = 'Ruben'; // omdat name public is kunnen we hem bewerken
echo $wouter->getName(); // Ruben
?>
class Person
{
public $name;
public function setName( $name )
{
$this->name = ucfirst($name); // zorg dat de naam altijd met een hoofdletter begint
}
public function getName()
{
return $this->name;
}
}
$wouter = new User;
$wouter->setName('wouter');
echo $wouter->getName(); // Wouter
$wouter->name = 'Ruben'; // omdat name public is kunnen we hem bewerken
echo $wouter->getName(); // Ruben
?>
Maak daarom properties altijd protected of private en niet public
- Gebruik uitgebreide comments, zodat alles duidelijk wordt en je het later simpel naar een documentatie kan opzetten met bijv. http://phpdoc.org/ Een voorbeeld van juiste comments: http://www.phphulp.nl/php/script/classes/phpbench/1936/researchphp/1708/
- geef dingen die nodig zijn voor de class, als naam leeftijd en beroep in dit geval, mee aan de constructor.
Wat andere tips:
- gebruik geen inline CSS als bgcolor="" of style=""
De oplossing is door gegevens op te slaan in een database. Vervolgens kun je die dan met objecten opslaan. Een voorbeeldje van de procedurele code (dus zonder classes) die je wilt:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$wouter = new Person('Wouter', 25, 'Webdeveloper');
$wouter->save(); // sla de gebruiker op
$ruben = User::getById(2); // haal de user met id = 2 op
echo $ruben->getName(); // echoëd de naam van de user
?>
$wouter = new Person('Wouter', 25, 'Webdeveloper');
$wouter->save(); // sla de gebruiker op
$ruben = User::getById(2); // haal de user met id = 2 op
echo $ruben->getName(); // echoëd de naam van de user
?>
Een voorbeeldje, dat misschien nog ietwat moeilijk is, over hoe jou classes er dan uit zien kun je hier vinden: http://www.phphulp.nl/php/forum/topic/applicatie-naamgeving/81370/3/#578116