pad ophalen in OOP
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?
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!
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...)
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)
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
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'));
?>
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'));
?>
Regel 23:
$container['config.parser'] = function($c) {
Klopt dat? Die $c?
Ja, een functie argument mag je toch elke naam meegeven?
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! :)
@Ozzie, ja. Die functie is gewoon een normale functie.
Thanks Wouter!