Versio

Hook

Het maken van "hooks" kan een behoorlijk voordeel opleveren in schaalbaarheid en flexibiliteit van een applicatie of script. Een "hook" maakt het mogelijk (bijvoorbeeld) plugins te laden die verderop in het script het gedrag te veranderen zonder dat hiervoor code herschreven hoeft te worden.
Ook zorgt het er voor dat functionaliteit alleen veranderd daar waar het is toegestaan, namelijk de plek waar de hook uitgevoerd wordt.

De class is eenvoudig te extenden zodat je functionaliteit kunt toevoegen om zo bijvoorbeeld ook prioriteit aan callbacks mee te geven etc.

Deze class is eigenlijk een behoorlijk verbeterde versie van een class die ik hier ooit eerder eens heb gepost onder de naam "Bundel Acties".

Gesponsorde koppelingen

PHP script bestanden

  1. hook

 

5 reacties op 'Hook'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Tim
tim
5 jaar geleden
 
0 +1 -0 -1
Waarom bij beginners, ik snap er maar bar weinig van?
Jelmer rrrr
Jelmer rrrr
5 jaar geleden
 
0 +1 -0 -1
call_user_func_array kan ook als eerste argument een array met 2 strings (static call naar een klasse::method) en een array met een object en een string (call naar de method op de meegegeven instantie) dus op zich heb je call_user_method_array en de is_array controle niet eens nodig.

Verder zou ik persoonlijk add_callback een instantie van Callback laten slikken in plaats van hem intern aanmaken, omdat je dan leuke constructies kan maken met objecten die callbacks terug geven. Als je hem trouwens puur als interface zou maken (en een simpele implementatie zoals je er nu bij hebt) dan kan je ook bestaande klassen simpel aanpassen om hooks op te vullen.
Emiel Klein
Emiel Klein
5 jaar geleden
 
0 +1 -0 -1
@tim
Nou, ik zal het even voor je aanpassen :-)


@Jelmer
Bedankt voor het linkje, ziet er interessant uit. Dit zal ik later eens grondig doornemen.
Over de static call met call_user_func_array(): Indien je een callback naar bijvoorbeeld je database wilt doen, werkt het dan wel als je een static call maakt? Want in de klasse zelf is geen resource gedefinieert, die zit in de instance. Dan heb je alsnog call_user_method_array() nodig. Of zie ik dit verkeerd?
Jelmer rrrr
Jelmer rrrr
5 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$instantie
= new Klasse();
call_user_func_array(array($instantie, 'doeIets'), array());
?>

Deze zal doeIets op de instantie van Klasse die in $instantie zit.
Emiel Klein
Emiel Klein
5 jaar geleden
 
0 +1 -0 -1
@Jelmer
Heb het getest en inderdaad, scheelt weer een if statement. Ik heb het aangepast...

Verder heb ik ook nog eens nagedacht over wat je zei m.b.t. add_callback een instantie van Callback te laten slikken.
Het bied inderdaad leuke mogelijkheden en bij een uitbreiding ga ik dit zeker doen.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

  • Labels
  • Geen tags toegevoegd.