hulp bij classes gevraagd
Graag zou ik jullie hulp willen vragen bij het volgende;
ik heb een bestaande class met functionaliteiten en daarbij wil ik graag het volgende doen;
zodra er maar een functie van die class wordt aangeroepen, dan wil dat er tegelijkertijd een functie check (in dezelfde class) wordt uitgevoerd.
dus:
class Check{
function Check(){}
function B(){}
function C(){}
}
Dus stel dat ik function B zou aanroepen; dat ik dan altijd eerst function check uitvoer.
dit lijkt mij onnodig veel werk:
function B(){ $this-> Check(); }
Ik denk haast dat het makkelijker kan.
Iemand een idee?
alvast bedankt.
rico
Jouw manier is toch prima verder?
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 CheckWrapper
{
private $parent;
public function __construct($parent)
{
$this->parent = $parent;
}
public function __call($method, $arguments)
{
$this->parent->check();
return call_user_func_array(array($this->parent, $method), $arguments);
}
}
$oorspronkelijke_object = new Appeltaart();
$wrapper = new CheckWrapper($oorspronkelijke_object);
$wrapper->bak(24);
/*
CheckWrapper->call('bak', array(24))
> Appeltaart->check();
> Appeltaart->bak(24);
*/
?>
class CheckWrapper
{
private $parent;
public function __construct($parent)
{
$this->parent = $parent;
}
public function __call($method, $arguments)
{
$this->parent->check();
return call_user_func_array(array($this->parent, $method), $arguments);
}
}
$oorspronkelijke_object = new Appeltaart();
$wrapper = new CheckWrapper($oorspronkelijke_object);
$wrapper->bak(24);
/*
CheckWrapper->call('bak', array(24))
> Appeltaart->check();
> Appeltaart->bak(24);
*/
?>
Nadeel is dat aanroepen vanuit Appeltaart zelf niet langs check() gaan, dat je in je code moet zorgen dat je niet per ongeluk Appeltaart direct aanspreekt, en dat instanceof e.d. niet langer werken.
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
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
<?php
classAppeltaart
{
private function check()
{
// doe iets spannends
}
publicfunction__call($method,$arguments)
{
$this->check();
$method = '_' . $method;
returncall_user_func_array(array($this,$method),$arguments);
}
private function _bak($minuten)
{
return 'Jouw appeltaart is ' . $minuten . ' gebakken!';
}
}
$appeltaart=newAppeltaart();
echo $appeltaart->bak(24);
/*
Appeltaart->call('bak', array(24))
> Appeltaart->check();
> Appeltaart->_bak(24);
*/
?>
classAppeltaart
{
private function check()
{
// doe iets spannends
}
publicfunction__call($method,$arguments)
{
$this->check();
$method = '_' . $method;
returncall_user_func_array(array($this,$method),$arguments);
}
private function _bak($minuten)
{
return 'Jouw appeltaart is ' . $minuten . ' gebakken!';
}
}
$appeltaart=newAppeltaart();
echo $appeltaart->bak(24);
/*
Appeltaart->call('bak', array(24))
> Appeltaart->check();
> Appeltaart->_bak(24);
*/
?>
Ik moet het even laten bezinken (en jullie voorbeelden uittesten). Dan zal ik het beter begrijpen.
Zeker heb ik in ieder geval weer geleerd van:
- return call_user_func_array + function __call
Bedankt!
rico