[oop] set of add?
Voorbeeldje:
Stel we hebben een class waarin je al je URL's opslaat:
Nu wil een functie maken waarmee ik een URL kan toevoegen... of is het een URL instellen?
Je zou hier een URL kunnen setten, setUrl('mijnurl.nl'), maar je zou 'm ook net zo goed kunnen adden, addUrl('mijnurl.nl').
Wat is het verschil?
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
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
<?php
class UrlCollection {
private $urls = array();
public function addUrl($url) {
# Checken als dit wel een url is (weggelaten)
$this->urls[] = $url;
}
# Set url zou het volgende doen
public function setUrl($url) {
$this->urls[] = array($url);
}
}
class User {
private $username;
public function setUsername($username) {
# Valideren ook wegelaten
$this->username = $username;
}
}
?>
class UrlCollection {
private $urls = array();
public function addUrl($url) {
# Checken als dit wel een url is (weggelaten)
$this->urls[] = $url;
}
# Set url zou het volgende doen
public function setUrl($url) {
$this->urls[] = array($url);
}
}
class User {
private $username;
public function setUsername($username) {
# Valideren ook wegelaten
$this->username = $username;
}
}
?>
Dus als er meerdere opties mogelijk zijn gebruik ik add om iets toe te voegen en set om iets te overschrijven (iets wat dus maar één keer kan gedefinieerd worden).
Ah, oké. Dus als ik het goed begrijp dan is het zo dat je met "set" iets overschrijft, en met "add" iets toevoegt. Is dat wat je bedoelt?
Edit
Bij die UrlCollection zou je dus ook gewoon removeUrl($url) of deleteUrl($url) kunnen hebben wanneer dat bij de User dus niet zo zou zijn (kan natuurlijk wel, maar je kan gewoon set daarvoor gebruiken).
Toevoeging op 23/04/2013 23:18:31:
P.S. zou je in het voorbeeld van de URL's dan zowel een add als een set functie in je class opnemen?
Nee, want met set zou je alles terug resetten. Waarom zou je dat doen? Dan zou je wel een reset functie kunnen gebruiken, maar alsnog is er dan iets verkeerd tenzei je object blijft gebruiken door de hele applicatie heen natuurlijk.
Ah oké, thanks... ik zou ook niet weten waarom je dat zou willen resetten eigenlijk...
set kun je enkel een array laten meegeven en dat je dan zo eigenlijk nieuwe waardes aan je var kunt meegeven. add, is toevoegen aan de array.
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
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
<?php
class UrlCollection
{
/**
* @var array
*/
private $Urls;
/**
* @param string|array $collection Optional URL (string) or URL collection (array).
* @return object
*/
public function __construct($collection = null)
{
if ($collection != null) {
$this->setUrl($collection);
}
}
/**
* @throws Exception
* @param string|array $url URL (string) or URL's (array) to add.
* @return object
*/
public function addUrl($url)
{
if (!isset($this->Urls)) {
$this->setUrl($url);
} elseif (is_array($url)) {
foreach ($url as $key => $value) {
$this->addUrl($key);
$this->addUrl($value);
}
} elseif ($this->isUrl($url)) {
$this->Urls[] = $url;
} else {
throw new Exception('Invalid URL.');
}
return $this;
}
/**
* @param string $variable URL to validate.
* @return bool
*/
private function isUrl($variable)
{
if (filter_var($variable, FILTER_VALIDATE_URL) == false) {
return false;
} else {
return true;
}
}
/**
* @param string|array $url URL (string) or URL's (array) to set.
* @return object
*/
public function setUrl($url)
{
$this->Urls = array();
$this->addUrl($url);
return $this;
}
}
?>
class UrlCollection
{
/**
* @var array
*/
private $Urls;
/**
* @param string|array $collection Optional URL (string) or URL collection (array).
* @return object
*/
public function __construct($collection = null)
{
if ($collection != null) {
$this->setUrl($collection);
}
}
/**
* @throws Exception
* @param string|array $url URL (string) or URL's (array) to add.
* @return object
*/
public function addUrl($url)
{
if (!isset($this->Urls)) {
$this->setUrl($url);
} elseif (is_array($url)) {
foreach ($url as $key => $value) {
$this->addUrl($key);
$this->addUrl($value);
}
} elseif ($this->isUrl($url)) {
$this->Urls[] = $url;
} else {
throw new Exception('Invalid URL.');
}
return $this;
}
/**
* @param string $variable URL to validate.
* @return bool
*/
private function isUrl($variable)
{
if (filter_var($variable, FILTER_VALIDATE_URL) == false) {
return false;
} else {
return true;
}
}
/**
* @param string|array $url URL (string) or URL's (array) to set.
* @return object
*/
public function setUrl($url)
{
$this->Urls = array();
$this->addUrl($url);
return $this;
}
}
?>
Gewijzigd op 24/04/2013 15:23:01 door Ward van der Put
Maar ik had het inderdaad al zo begrepen op basis van de reacties van Aaron.
Maar toch bedankt! :)