[pdo] object fetchen
Zou iemand met een werkende PDO database-verbinding misschien zo vriendelijk willen zijn om even iets voor mij te testen? Mijn eigen verbinding ligt momenteel in de soep, en ik wil graag iets weten zodat ik weer verder kan.
Wat ik graag wil weten is of ik met fetchObject, http://www.php.net/manual/en/pdostatement.fetchobject.php, private properties van een class kan setten, en of ik ook (private of protected?) properties van een parent (abstracte) class kan setten.
Stel we hebben dit:
Code (php)
En in de database heb je deze tabel:
Kun je dan met fetchObject, door de databasegegevens als User object te fetchen, in één keer alle 3 de properties (id, name, mail) setten? Daar ben ik erg benieuwd naar... Of moeten de properties in de abstracte class bijv. protected zijn ipv private? Is er iemand die dit weet, of die misschien zo vriendelijk is om dit even te testen?
Bij voorbaat hartelijk dank.
>
(Trouwens een abstracte class Person en die extenden met User is echt een zware nee, maar waarom dit slecht is hebben we je al uitgelegd in je vorige topic.)
Maar de vraag heeft in dit geval vooral betrekking op het feit dat de properties in zowel de User class als de Person class private zijn. Als ik de data nu fetch als een User object, worden dan ook de private properties van de Person class geset. Weet je dat zeker?
Je zal je properties uit Person vanuit je user classe niet kunnen bereiken, want ze zijn private. Daarvoor moet je protected gebruiken.
En als laatste nog even terugkomend op die abstracte Person. Vind je dat geen goed idee omdat je dan geen new Person kunt initialiseren, of is er een andere reden?
Dank je voor je reactie. Aha, oke... maar wat nu als ik onderscheid wil maken tussen een Person en een User? Is mijn opzet dan wel oké? Jij leerde mij namelijk ooit dat je "extends" moet zien als "IS EEN". En een user is een person toch?
Ik leerde jouw ook, minder ooit dan dat ooit, dat extends (inheritance) bijna nooit het beste antwoord is op OO problemen :)
Hehe... lol. Maar ik wil dus een onderscheid hebben tussen Users (mensen die de site daadwerkelijk gebruiken) en Persons (mensen die de site niet gebruiken). Een user is dus een persoon die de site gebruikt. Dan klopt het toch?
Een classe Cube de classe Rectangle laten extenden is geen goed idee.
http://3v4l.org/RM2Tt
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
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
<?php
interface Shape {
public function getArea();
}
class Rectangle implements Shape {
private $width;
private $height;
public function setWidth($width) {
$this->width = $width;
}
public function setHeight($height) {
$this->height = $height;
}
public function getWidth() {
return $this->width;
}
public function getHeight() {
return $height->height;
}
public function getArea() {
return $this->height * $this->width;
}
}
class Cube extends Rectangle {
public function setWidth($width) {
parent::setWidth($width);
parent::setHeight($width);
}
public function setHeight($height) {
parent::setWidth($height);
parent::setHeight($height);
}
}
function setWidthAndReturnArea(Rectangle $rectangle, $width) {
$rectangle->setWidth($width);
return $rectangle->getArea();
}
$width = 2;
$height = 2;
$cube = new Cube();
$cube->setWidth($width);
$cube->setHeight($height);
$area = setWidthAndReturnArea($cube, $width = 4);
if ($area == $width * $height) {
echo '$cube gedraagt zich als een Rectangle';
} else {
echo '$cube gedraagt zich niet als een Rectangle';
}
?>
interface Shape {
public function getArea();
}
class Rectangle implements Shape {
private $width;
private $height;
public function setWidth($width) {
$this->width = $width;
}
public function setHeight($height) {
$this->height = $height;
}
public function getWidth() {
return $this->width;
}
public function getHeight() {
return $height->height;
}
public function getArea() {
return $this->height * $this->width;
}
}
class Cube extends Rectangle {
public function setWidth($width) {
parent::setWidth($width);
parent::setHeight($width);
}
public function setHeight($height) {
parent::setWidth($height);
parent::setHeight($height);
}
}
function setWidthAndReturnArea(Rectangle $rectangle, $width) {
$rectangle->setWidth($width);
return $rectangle->getArea();
}
$width = 2;
$height = 2;
$cube = new Cube();
$cube->setWidth($width);
$cube->setHeight($height);
$area = setWidthAndReturnArea($cube, $width = 4);
if ($area == $width * $height) {
echo '$cube gedraagt zich als een Rectangle';
} else {
echo '$cube gedraagt zich niet als een Rectangle';
}
?>
>> Niet alles wat in de echte wereld geld is een op een over te nemen in code.
Dat snap ik wel. Maar nu mijn vraag... wat is er niet goed aan een User die een Person extend? Jullie zeggen dat het niet goed is. Oké, maar dan wil ik graag weten wat er volgens jullie niet goed aan is. Ik zie het namelijk niet.
Dat een User en een Person helemaal niks verschillend is. Ze zijn beide een Person (of User...). Het enige verschil is dat ze meer rechten krijgen. Als ik jouw site bezoek ben ik gewoon Wouter, als ik dan een account aanmaakt wordt ik niet opeens een nieuw mens, ik blijf gewoon die Wouter 1.0 Het enige wat er gebeurd is dat ik nu rechten heb om op jouw forum te schrijven (aangenomen dat jouw site een forum was).
Mijn gedachte was de volgende: een User is een gebruiker van een website. Dat is dus iemand die actief iets met jouw website doet. Een person (niet User) maakt geen gebruik van jouw website. Stel dat jij een website maakt over beroemde schilders uit de oudheid, dan zijn die schilders wel personen, maar geen Users. Ze gebruiken de website namelijk niet. Mijn gedachte is dus, je hebt een persoon (iemand waarover je praat op jouw website) en daarnaast heb je een User, een gebruiker van jouw website. Valt iets voor te zeggen toch?