[oop] set of add?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

23/04/2013 22:57:01
Quote Anchor link
Misschien een raar vraagje... maar wat is eigenlijk het verschil tussen set en add?

Voorbeeldje:

Stel we hebben een class waarin je al je URL's opslaat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
class UrlCollection {

  private $urls = array();

}

?>

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?
 
PHP hulp

PHP hulp

08/01/2025 17:10:06
 

23/04/2013 23:02:50
Quote Anchor link
Ik gebruik altijd add bij het volgende.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
    }

}


?>

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).
Gewijzigd op 23/04/2013 23:04:51 door
 
Ozzie PHP

Ozzie PHP

23/04/2013 23:05:29
Quote Anchor link
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?
 

23/04/2013 23:15:31
Quote Anchor link
Dat is wat ik bedoel!

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).
Gewijzigd op 23/04/2013 23:18:15 door
 
Ozzie PHP

Ozzie PHP

23/04/2013 23:17:24
Quote Anchor link
Oké, top! Thanks :)

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?
 

23/04/2013 23:21:04
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

23/04/2013 23:22:05
Quote Anchor link
Ah oké, thanks... ik zou ook niet weten waarom je dat zou willen resetten eigenlijk...
 
- Raoul -

- Raoul -

24/04/2013 13:17:57
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

24/04/2013 15:20:02
Quote Anchor link
Raoul heeft gelijk: een setUrl() kan een andere verantwoordelijkheid hebben dan een addUrl(). Hangt er, zoals zo vaak, vanaf wat je erin wilt stoppen. Even in klad:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
    }
}

?>
Gewijzigd op 24/04/2013 15:23:01 door Ward van der Put
 
Ozzie PHP

Ozzie PHP

24/04/2013 15:23:46
Quote Anchor link
Thanks heren voor de toelichting :)

Maar ik had het inderdaad al zo begrepen op basis van de reacties van Aaron.
Maar toch bedankt! :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.