Door
Wim Roffel
op 16-01-2019 17:55
gewijzigd op 16-01-2019 19:33
2.014 views
Ik werk in een framework dat werkt met hooks. Voor elke hook is er een functie (method) hookMyHook() binnen een bepaalde class waarbij MyHook de hook-naam is.
Wat ik wil is zulke methods dynamisch aanmaken. Ze kunnen allemaal naar dezelfde functie verwijzen maar moeten wel een argument krijgen dat ze onderscheidt.
<?php
class MyClass
{
public function hookhaakeen($arg) {
commonfunc("haakeen");
}
public function hookhaaktwee($arg) {
commonfunc("haaktwee");
}
public function hookhaakdrie($arg) {
commonfunc("haakdrie");
}
?>
Waarbij de eerste twee regels uiteraard al bestaan.
Dit lijkt mij ook geen uniek probleem, anderen zijn hier waarschijnlijk ook al tegenaan gelopen, tenzij het een homegrown framework is. Wat zegt de documentatie van dit framework hierover?
Dit is een algemene PHP vraag. Ik zie in de documentatie wel iets over anonieme functies die je dan aan variabelen kunt toewijzen. Maar dan eindig ik et variabelen met een dollar ervoor.
Dit klinkt inderdaad nogal abstract. Daarnaast, een hook is toch juist bedoeld als inhaakpunt in een object zodat deze een update kan sturen naar andere objecten op het moment dat er een bepaald event optreedt (dus in wezen is dit een callback functie)? Dit gaat over het gedrag van een object, die ergens vastgelegd moet worden en in zekere zin ook vast moet staan? Wat jij probeert te doen klinkt alsof je dit dynamisch wil maken. Maar creƫer je dan niet een hoop problemen zoals het beschikbaar zijn van een type hook (bestaat mogelijk nog niet) en ook dat het niet duidelijk is welke hooks er op welk moment beschikbaar zijn? En hoe weten alle objecten hoe ze interactie met die hooks kunnen hebben, deze moeten toch in feite al weten waar ze in willen haken in dat object?
Heb je anders al eens naar design patterns gekeken die iets soortgelijks doen want nu klinkt het alsof je iets supergeneriek wilt maken maar wat heb je aan deze flexibiliteit?
En dit is dus een (zoveelste?) abstractielaag tussen allerlei code die dingen heel vaag voorschrijven en code die op een gegeven moment ook echt iets "doet", dit maakt code ook complexer en dus lastiger in onderhoud en ontwikkeling.
tl;dr code is te vaag/abstract. Geef een concreet voorbeeld waar deze insteek gewenst zou zijn, en dan zijn er waarschijnlijk andere/betere oplossingen voor wat je probeert te bereiken.
EDIT: iets wat ik sowieso mis is een soort van registreermethode?