Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP
een constructor werkt alleen bij het aanmaken van de klasse
ik denk dat je het zelf zal moeten fixxen, want een standaard oplossing zie ik zo 1-2-3 niet
Doet iets met Cloud (MS/IBM)
The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.
Burat schreef op 24 september 2002 @ 10:05:
Is het mogelijk in PHP om een function of expressie te definieren die bij elke aanroep van zelfgedefinieerde functies uitgevoerd wordt?
Dus: Je maakt een klasse met 5 functies, en je wilt dat bij elke aanroep van een functie in die klasse "iets" gedaan wordt.
#define iets.
Is die iets telkens hetzelfde?
https://fgheysels.github.io/
Dat lijkt me niet meer dan logischBurat:
Dus: Je maakt een klasse met 5 functies, en je wilt dat bij elke aanroep van een functie in die klasse "iets" gedaan wordt.
Ik denk dat je met zoiets een eind komt:
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
| class Base { var $a; function Base () { $this->a = 0; } function voorAlleFuncties () { $this->a ++; } } class Sub extends Base { function Sub () { Base::Base (); } function functie1 () { Base::voorAlleFuncties (); echo "woei!\n"; } function functie2 () { Base::voorAlleFuncties (); echo "woei en nog eens woei !\n"; } function functie3 () { Base::voorAlleFuncties (); echo "\$this->a is nu: {$this->a}\n"; } } $s = new Sub (); $s->functie1(); $s->functie2(); $s->functie3(); |
Om echt vast te leggen dat voor elke functie een bepaalde aanroep moet gebeuren denk ik niet dat je een oplossing vindt (tenzij je met hele gore eval-constructies gaat werken, maar doe dat alsjeblieft niet
hth
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
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
| Class Logger { var stack; function Logger() { } function addToStack($str) { $this->stack[] = $str; } } Logger l = new Logger(); Class TestLogger { function TestLogger() { $GLOBALS["l"]->addToStack(__FUNCTION__); $this->init(); } function init() { $GLOBALS["l"]->addToStack(__FUNCTION__); $this->doIt(); } function doIt() { $GLOBALS["l"]->addToStack(__FUNCTION__); } } TestLogger t = new TestLogger(); |
Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP
Dus dat je 1 keer definieert dat bij elke functie (Base::voorAlleFuncties ();) moet worden aangeroepen.
Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP
zou kunnen dat er dan een workaround is te verzinnen...
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
te laat
[ Voor 0% gewijzigd door stekkel op 24-09-2002 10:25 . Reden: te laat ]
Er zijn daar al tools voor, die voor elke regel (!) het aantal ms. wegschrijft en je dus je script kan analyseren.
deze bv.: http://www.pm9.com/newpm9/itbiz/php/phpdyn/index.php
Klaar voor een nieuwe uitdaging.
Elk nieuw component wat dan gecreerd wordt, krijgt sowieso de contructor van de ultieme ancestor class (TObject) mee.
Forget your fears...
...and want to know more...
Voor Java kan je gebruik maken van AspectJ als je aspect georienteerd programmeren wilt toepassen. Ik vermoed dat er nog niemand op de gedachte is gekomen om een aspect georienteerde uitbreiding voor PHP te maken, maar dat je weet maar nooit
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Improve modularity with aspect-oriented programming
I want my AOP
Aspect Oriented Programming
en natuurlijk de site:
http://www.aspectj.org/
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP
Zo zie je maar dat je naar aanleiding van dergelijke vragen misschien wel hele goede ideeen op kan doen
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP
Het zou inderdaad heel aardig en nuttig zijn, maar onderschat de hoeveelheid werk die voor een niet triviale implementatie (met functionaliteit richting die van AspectJ gaat) vooral niet.Burat: Kunnen wij met P&W dat niet oppakken en met z'n allen een AOP PHP maken?
Ik zie hem hier: http://aosd.net/tools.html in ieder geval nog niet bijstaan
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
1
2
3
4
5
6
7
8
9
10
| function logTick($f, $l) { $GLOBALS["debuglog"]->trace($f, $l, "", "", ""); } register_tick_function("logTick", __FILE__ , __LINE__); declare (ticks=1) { ... } |
Dit werkt alleen niet, omdat bij het registeren van de functie de argumenten al worden vastgelegd. In de log komt dus elke keer de regel/file van register_tick_function binnen. Dit is niet op te lossen denk ik. Je kan hier geen eval() kan gebruiken (omdat dan line: 1 van eval wordt gebruikt). Ook kan je geen references naar constanten kan maken, anders zou misschien een reference naar __FILE__ meegeven aan register_tick_function werken.
Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP