Ganska dålig rubrik va? I vilket fall så stötte vi på ett tillfälle där vi ville köra kod innan en closure kördes. Vi vill alltså “prependa kod i en closure”. Just i det här fallet var det att vi ville köra funktionen newrelic_name_transaction för att kunna spåra en request innan routen körs i newrelic - utan att behöva lägga till koden i varje routes kod.

<?php /* Såhär skapar vi en route exempelvis */ $routes [] = new Route ( 'GET /index/@var1' , function ( $var1 ) { echo 'Hello world! ' . $var1 ; }); /* Såhär ville vi inte göra */ $routes [] = new Route ( 'GET /index/@var1' , function ( $var1 ) { if ( function_exists ( 'newrelic_name_transaction' )) { newrelic_name_transaction ( 'GET /index/@var1' ); } echo 'Hello world! ' . $var1 ; }); /** * Såhär löste vi det */ class Route { /* .. */ function __construct ( $request , closure $functions , $weight = NULL ) { $this -> request = $request ; $this -> weight = $weight ; $this -> function = function ( ... $vars ) use ( $functions ) { if ( function_exists ( 'newrelic_name_transaction' )) { newrelic_name_transaction ( $this -> request ); } return $functions ( ... $vars ); }; } /* .. */ }