[OOP] Winkelwagen maken
Een tijd geleden heb ik een winkelwagen van phphulp helemaal ge-rebuilt en nu wil ik een winkelwagen leren maken in oop, om zo oop een beetje te leren.
Ik heb de volgende opbouw gemaakt:
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 Winkelwagen
--------------------------------------
| Door Milo van Soest |
| Op woensdag 25 augustus 2010 |
| |
| Alle rechten zijn voorbehouden. |
--------------------------------------
Classes (pagina's) van de winkelwagen class.
product.class.php
----------------------
Product
- AddProduct
- EditProduct
- DeleteProduct
klant.class.php
----------------------
Klant
- NewCustomer
- EditCustomer
- DeleteCustomer
*/
class Product {
private $id;
private $naam;
protected $kosten;
private $afbeelding;
# Alle producten ophalen
function GetProduct () {
return ;
}
# Product toevoegen
function AddProduct () {
return ;
}
# Product wijzigen
function EditProduct () {
return ;
}
# Product verwijderen
function DeleteProduct () {
return ;
}
}
?>
/*
Class Winkelwagen
--------------------------------------
| Door Milo van Soest |
| Op woensdag 25 augustus 2010 |
| |
| Alle rechten zijn voorbehouden. |
--------------------------------------
Classes (pagina's) van de winkelwagen class.
product.class.php
----------------------
Product
- AddProduct
- EditProduct
- DeleteProduct
klant.class.php
----------------------
Klant
- NewCustomer
- EditCustomer
- DeleteCustomer
*/
class Product {
private $id;
private $naam;
protected $kosten;
private $afbeelding;
# Alle producten ophalen
function GetProduct () {
return ;
}
# Product toevoegen
function AddProduct () {
return ;
}
# Product wijzigen
function EditProduct () {
return ;
}
# Product verwijderen
function DeleteProduct () {
return ;
}
}
?>
Aangezien dit het eerste is wat ik probeer zou ik graag wat hulp willen (ik heb deze: http://phptuts.nl/view/45/6/ handleiding al gelezen maar vind het toch nog erg moeilijk.
Kunnen jullie me tips geven met hoe ik verder zou moeten kunnen gaan en mij vertellen of dit een beetje een goede opbouw is?
Gr, Milo
De naam van een klasse moet effectief voorstellen wat die klasse ook doet.
Je heb een klasse Product met id, naam, prijs, etc etc. Aan een product kan je geen product toevoegen... Je klasse stelt een object voor, het is iets tastbaar. Als je die addProduct wilt kunnen doen, moet je eerst een ProductList maken (of bijhouden in de database).
Enkel editProduct zou deze klasse mogen hebben. En dat eigenlijk nog niet... Eerder iets als set en get functies voor elk van zijn member-variabelen.
Wat deze klasse zou moeten zijn is iets zoals dit:
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
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
<?php
class Product {
private $id;
private $naam;
protected $kosten;
private $afbeelding;
# Alle producten ophalen
function getId () {
return $id;
}
# Product toevoegen
function getNaam() {
return $naam;
}
//.....
# Product wijzigen
function setId($id) {
$this->id = $id;
}
# Product verwijderen
function setNaam($naam) {
$this->naam = $naam;
}
}
?>
class Product {
private $id;
private $naam;
protected $kosten;
private $afbeelding;
# Alle producten ophalen
function getId () {
return $id;
}
# Product toevoegen
function getNaam() {
return $naam;
}
//.....
# Product wijzigen
function setId($id) {
$this->id = $id;
}
# Product verwijderen
function setNaam($naam) {
$this->naam = $naam;
}
}
?>
In die ProductList (van daarnet) kan je dan functies addProduct($id, $naam, $prijs /*, etc etc*/), editProduct($huidig_id, $nieuwe_naam, $nieuwe_prijs /*, etc etc*/), en deleteProduct($id); maken. Je ProductLijst is in feite niets meer dan de opslag van deze product-objecten in de database en verzorgt enkel de manipulatie van meerdere van die objecten.
Met vriendelijke groeten,
Jens
Gewijzigd op 25/08/2010 15:37:31 door Jens V
Maar wat je nu doet is de naam en id apart ophalen? ,maar je kan toch ook wel alles ophalen in 1 functie, en dat dan als array returnen of niet?
zoiets:
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
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
<?php
function getProduct ($id) {
$qry = "SELECT
id,
titel,
kosten,
afbeelding
FROM
producten
WHERE
id = '".intval($id)."'";
if($sql = mysqli_query($qry, $conn))
{
if(mysqli_num_rows($sql) > 0)
{
while($rec = mysqli_fetch_assoc($sql))
{
/*
product
id,
titel,
kosten,
afbeelding
*/
$product = array($rec['id'], $rec['titel'], $rec['kosten'], $rec['afbeelding']);
}
}
else
{
$errors[] = 'Er zijn geen producten';
}
}
else
{
$errors[] = 'Fout in de query.';
}
return $product;
}
?>
function getProduct ($id) {
$qry = "SELECT
id,
titel,
kosten,
afbeelding
FROM
producten
WHERE
id = '".intval($id)."'";
if($sql = mysqli_query($qry, $conn))
{
if(mysqli_num_rows($sql) > 0)
{
while($rec = mysqli_fetch_assoc($sql))
{
/*
product
id,
titel,
kosten,
afbeelding
*/
$product = array($rec['id'], $rec['titel'], $rec['kosten'], $rec['afbeelding']);
}
}
else
{
$errors[] = 'Er zijn geen producten';
}
}
else
{
$errors[] = 'Fout in de query.';
}
return $product;
}
?>
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
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
<?php
function getProduct ($id)
{
$product = false;
$qry = "SELECT
id,
naam,
kosten,
afbeelding
FROM
producten
WHERE
id = '".intval($id)."'";
if($sql = mysqli_query($qry, $conn))
{
if(mysqli_num_rows($sql) > 0)
{
$rec = mysqli_fetch_assoc($sql);
/*
product
id,
titel,
kosten,
afbeelding
*/
$product = new Product($rec['id'], $rec['naam'], $rec['kosten'], $rec['afbeelding']);
}
}
return $product;
}
?>
function getProduct ($id)
{
$product = false;
$qry = "SELECT
id,
naam,
kosten,
afbeelding
FROM
producten
WHERE
id = '".intval($id)."'";
if($sql = mysqli_query($qry, $conn))
{
if(mysqli_num_rows($sql) > 0)
{
$rec = mysqli_fetch_assoc($sql);
/*
product
id,
titel,
kosten,
afbeelding
*/
$product = new Product($rec['id'], $rec['naam'], $rec['kosten'], $rec['afbeelding']);
}
}
return $product;
}
?>
Ophalen met:
Code (php)
Probeer in je database ook altijd dezelfde benaming als in je klasses te gebruiken... Je had in je db "titel" voor de naam van een product, terwijl je in je klasse daar "naam" hebt. Ook is de naam "kosten" een beetje ongelukkig gekozen. Neem hier eerder "prijs" voor. Als je bij de bakker staat ga je ook niet vragen wat "de kosten" van dat brood zijn, maar wat "de prijs" ervan is (ervan uitgaande dat je dat niet weet;) )
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
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
<?php
class Product {
private $id;
private $naam;
protected $kosten;
private $afbeelding;
// constructor toegevoegd
function __construct($id, $naam, $kosten, $afbeelding) {
$this->id = $id;
$this->naam = $naam;
$this->kosten = $kosten;
$this->afbeelding = $afbeelding;
}
function getId () {
return $id;
}
function getNaam() {
return $naam;
}
//.....
function setId($id) {
$this->id = $id;
}
function setNaam($naam) {
$this->naam = $naam;
}
}
?>
class Product {
private $id;
private $naam;
protected $kosten;
private $afbeelding;
// constructor toegevoegd
function __construct($id, $naam, $kosten, $afbeelding) {
$this->id = $id;
$this->naam = $naam;
$this->kosten = $kosten;
$this->afbeelding = $afbeelding;
}
function getId () {
return $id;
}
function getNaam() {
return $naam;
}
//.....
function setId($id) {
$this->id = $id;
}
function setNaam($naam) {
$this->naam = $naam;
}
}
?>
Dit laatste is een nieuwe versie van dat van mij van daarjuist. Heb een beetje foute commentaar weggedaan en een constructor toegevoegd. Die wordt in die getProduct functie hierboven aangeroepen door die new Product(.....);
Met vriendelijke groeten,
Jens
Gewijzigd op 25/08/2010 16:27:56 door Jens V