Callbacks in PHP
Verschillende functies in PHP beschikken over de mogelijkheid om met een zogenaamde user-callback te werken. De functie array_map() bijvoorbeeld voert de opgegeven functie uit op elk element van de opgegeven array. Leer hoe je in deze functies ook methodes op objecten en statische klassen kunt gebruiken!
U riep?
Normaal gesproken wordt een callback in PHP gedefinieerd als een string met daarin de naam van een functie:
-
function stripslashes_callback($val)
-
{
-
}
-
-
);
Callbacks met klassen en objecten
Maar het is nu niet meteen duidelijk hoe je met array_map() nu juist een methode van een klasse kunt aanroepen. PHP heeft dit opgelost door op de plek van een callback zowel een string als een array met de benodigde informatie te accepteren:
-
class HttpRequest
-
{
-
var $_gpcActive = FALSE;
-
-
function HttpRequest()
-
{
-
}
-
-
function StripMagicQuotes_callback($value)
-
{
-
}
-
}
-
-
$httpReq = new HttpRequest();
-
$_GET
-
);
-
Op vrijwel dezelfde methode kun je ook statische methodes uit een klasse aanroepen. Het verschil is dat je in plaats van de instantie als 1e array element juist een string opgeeft met daarin de klasse naam:
-
class HttpRequest
-
{
-
function StripMagicQuotes_callback()
-
{
-
}
-
}
-
-
$_GET
-
);
-
Zelf callbacks gebruiken
Callbacks zijn meer dan alleen array_map(), al is dat wel een ontzettend handige functie. Je kunt natuurlijk zelf ook een callback systeem implementeren voor een functie van jezelf. Je levert een stukje performance in maar krijgt daarvoor een enorm stuk flexibiliteit terug. Met de in Dynamische functies aanroepen in PHP beschreven call_user_func_array() functie kun je met enkele regels zelf gemakkelijk een callback-enabled functie maken. Dit zou bijvoorbeeld de PHP-implementatie van array_map() zijn:
-
function array_map_revisited ( $callback, $array )
-
{
-
foreach ($array as $key => $val) {
-
}
-
-
return $array;
-
}
Conclusie
Callbacks, zeker in combinatie met arrays, nemen wat performance in maar zijn vervolgens een enorm flexibele en krachtige tool in je ontwikkelaars toolbox.
Volg Scriptorama via RSS!
Reageer ook!
Vooral preg_replace_callback() is onmisbaar :)
Door Tri Pham
op 07.03.06 @ 11:37 am | Permalink
Zie ook de 'e' modifier voor preg_replace($pattern, $replacement, $subject) waarmee $replacement wordt geƫvalueerd als PHP code nadat backreferences zijn verwerkt: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php.
Zorgvuldig input controleren is hier geen overbodige luxe om code injectie te voorkomen.
Door Michel
op 07.03.06 @ 3:45 pm | Permalink
[...] We kunnen meteen even gebruik maken van de kennis die in het artikeltje Callbacks in PHP wordt beschreven om deze variabelen om te zetten in de juiste encoding en in een bruikbaar formaat: PLAIN TEXT PHP: [...]
Door Een POST request maken zonder CURL | Scriptorama op 07.06.06 @ 10:14 am | Permalink
[...] en functies dynamisch aan te roepen. Daar hebben we op Scriptorama al eens over geschreven: Callbacks in PHP. Er was echter altijd een beperking met statische aanroepen, hiervoor moest je altijd de ietwat [...]
Door PHP 5.3: GC, NOWDOC, ?: operator en GOTO | Scriptorama.nl op 09.05.08 @ 8:02 am | Permalink
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>