pad ophalen in OOP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3

Ozzie PHP

Ozzie PHP

02/05/2012 15:01:12
Quote Anchor link
Mja, ik snap je wel... maar ik vind DependencyInjectionContainer of ServiceContainer veel te lang... en container... ik vind het zo'n loze kreet. Maar ServiceContainer klopt toch ook niet met wat jij eerder zei, namelijk dat je niet alleen services maar ook parameters opslaat?

Overigens... die parameters die je opslaat zijn toch altijd bedoeld voor een service? De overige parameters zou je dan toch in een registry kunnen opslaan? Of is het de bedoeling dat je helemaal geen registry meer gebruikt als je zo'n service container gebruikt?
 
PHP hulp

PHP hulp

27/11/2024 01:31:26
 
Wouter J

Wouter J

02/05/2012 15:03:11
Quote Anchor link
Quote:
Of is het de bedoeling dat je helemaal geen registry meer gebruikt als je zo'n service container gebruikt?

Exact, vergeet die term en pattern. Je gaat nu alles doen via die mooie container die je bouwt!
 
Ozzie PHP

Ozzie PHP

02/05/2012 15:21:17
Quote Anchor link
Hehe, lol...

Maar stel nu ik heb een setting "show_errors" die true of false kan zijn. Sla ik die dan ook op in die container?

(en wat vind je van de naam Box ipv container? is stukje korter...)
 
Wouter J

Wouter J

02/05/2012 15:36:31
Quote Anchor link
Box zegt niks, Container is echt de naam die de uitvinder van het DI pattern aan zo'n Service Container heeft gegeven. Stel dat hij had gezegd, we noemen het een Service Box dan hadden we nu allemaal new Box() gedaan, maar dat is niet zo. Tevens zegt container iets van een verzameling en een Box heeft dat niet echt.

Quote:
Maar stel nu ik heb een setting "show_errors" die true of false kan zijn. Sla ik die dan ook op in die container?

Nee, deze hoort eigenlijk in de config, maar ja die config regel je ook doormiddel van een container. Dit is in elk geval hoe ik het zou doen, ben ook nog maar pas met DI bezig:
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
<?php
class Config
{
    protected $settings = array();

    public function set($id, $value)
    {

        $this->settings[$id] = $value;
    }

    public function get($id)
    {

        return (isset($this->settings[$id])
                    ?
$this->settings[$id]
                    :
null
               );
    }
}


// ik doe het in pimple, zodat je ook weet hoe dat eruit ziet
$container = new Pimple();

$container['config.parser.file'] = '/path/to/config/settings.ini';
$container['config.parser'] = function($c) {
    return parse_ini_file($c['config.parser.file']);
};

$container['config'] = function($c) {
    $config = new Config();
    foreach ($c['config.parser'] as $setting => $value) {
        $config->set($setting, $value);
    }


    return $config;
};


// ergens in je code
ini_set('show_errors', container['config']->get('show_errors'));
?>
 
Ozzie PHP

Ozzie PHP

02/05/2012 15:38:51
Quote Anchor link
Ah thanks Wouter, daar kan ik wat mee! :)

Regel 23:

$container['config.parser'] = function($c) {

Klopt dat? Die $c?
 
Wouter J

Wouter J

02/05/2012 16:11:51
Quote Anchor link
Ja, een functie argument mag je toch elke naam meegeven?
 
Ozzie PHP

Ozzie PHP

02/05/2012 16:36:22
Quote Anchor link
he.. maar wacht ff... ik dacht dat die $c de container (new Pimple()) moest bevatten??? Waar staat die $c dan voor? Oh wacht ff... die $c is dus vergelijkbaar met dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
public function foo($c) {
  echo $c;
}

?>


Begrijp ik dat goed? In dat geval snap ik wel waarom het in mijn test verkeerd ging, want ik probeerde een waarde mee te geven! :)
 
Wouter J

Wouter J

02/05/2012 16:38:40
Quote Anchor link
@Ozzie, ja. Die functie is gewoon een normale functie.
 
Ozzie PHP

Ozzie PHP

02/05/2012 16:42:11
Quote Anchor link
Ah oke... dat verklaart in alle opzichten waarom mijn de test de spreekwoordelijke soep in liep :)

Thanks Wouter!
 

Pagina: « vorige 1 2 3



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.