hulp bij classes gevraagd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ric swave

ric swave

14/05/2010 09:43:16
Quote Anchor link
beste leden,

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

PHP hulp

05/11/2024 16:30:58
 
Erik Rijk

Erik Rijk

14/05/2010 09:53:41
Quote Anchor link
Ik denk niet dat het simpeler kan eigenlijk.
Jouw manier is toch prima verder?
 
Jelmer -

Jelmer -

14/05/2010 10:17:09
Quote Anchor link
Je kan met PHP gemakkelijk een wrapper maken waar je het object achter verschuilt. Die wrapper roep je dan direct aan, en die wrapper roept dan bij iedere method aanroep van buitenaf check() aan.
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 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.
 
- -

- -

16/05/2010 01:02:49
Quote Anchor link
Is dit niet wat?

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
<?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);
*/

?>
 
Ric swave

ric swave

17/05/2010 10:50:19
Quote Anchor link
Bedankt jongens voor de info.

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
 
Niels Verwegen

Niels Verwegen

17/05/2010 11:37:02
Quote Anchor link
Misschien is hiernaar kijken, een erg goede OOP-tutorial vind ik!

http://www.phptuts.nl/view/45/6/
 
Chris -

Chris -

17/05/2010 13:06:53
Quote Anchor link
Overigens hoort dit topic meer thuis in PHP scripting en meer
 



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.