Welk foutje?

jbdeiman schreef op donderdag 12 juni 2014 @ 08:59:
[...]
Een "global" (ivm scope) is niet de juiste manier om e.e.a. toe te passen. Binnen het object zelf het object aanmaken, een waarde setten en het object weer returnen is ook niet helemaal de juiste manier. Beide opties werken, maar wijkt wel af van de ideeën van het OOP ontwikkelen.
Klopt wel, maar in PHP heb je zoals gezegd geen method overloading. Stel je wil een user ook kunnen afleiden van een ID dat je uit de database haalt of van een e-mailadres. Je hebt in PHP dan twee reële keuzes. Je kan de losse functies zelf aanroepen om je object te vullen, of je maakt static methods die een nieuwe instantie maken op basis van de ingevoerde gegevens en die instantie returnen. Dat laatste kan vooral handig zijn voor een functie als
User::getById($id), welke bijvoorbeeld een User-object aanmaakt op basis van het record in de database dat ID 12 heeft. Het klopt dat in dit specifieke geval de
User::createFromName($userName) niet heel handig is, maar bruikbaar kan het wel zijn. Er zijn echter wel voorbeelden van waar dat handig is, bijvoorbeeld de native method
DateTime::createFromFormat($format, $time, $timezone). 9 van de 10 keer heb je genoeg aan de constructor van de class, de tiende keer doe je het met deze statische method.
Voor de volledigheid voor de topicstarter, dit kan ook:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| class User
{
public function getId() { return $this->id; }
public function setId($id) { $this->id = $id; }
public function getUserName() { return $this->userName; }
public function setUserName($userName) { $this->userName = $userName; }
public function getEmail() { return $this->email; }
public function setEmail($email) { $this->email = $email; }
private $id;
private $userName;
private $email;
}
$user1 = new User();
$user1->setName("Pietje");
$user2 = new User();
$user2->setId(12); |
Uiteraard moet je je class waar nodig wel uitbreiden met validity checks, error handling, databasepersistentie, enz. Maar dat hangt van je requirements af en kan ik je zo dus niet uitleggen.

Barryvdh schreef op donderdag 12 juni 2014 @ 11:22:
[...]
Maar waarom zou je in OOP niet een object aan mogen passen? Normaal gesproken inderaad wel via een getter/setter, maar je kan toch prima een andere class hebben, die je een object meegeeft om bewerkingen op uit te voeren?
Je mag wel vanuit object A object B aanpassen, maar dan doe je dat doorgaans via de accessormethods, niet via de members zelf. Dus daar gebruik je gewoon de get/set-functies.
[
Voor 8% gewijzigd door
NMe op 12-06-2014 11:38
]