Nyheter i PHP 5.3

I somras lanserades PHP 5.3 och det innebar mycket nyheter och trevliga godsaker. Jag har idag tagit tag i saken och installerat PHP 5.3 på vår server på kontoret, det tog lite tid med till slut gick det. Jag är väldigt exalterad över den nya versionen och all ny funktionalitet, jag hoppas verkligen inte det tar alltför lång tid innan PHP 5.3 blir standard på webbhotellen.

Det är väldigt mycket gamla saker som är förbättrade i nya versionen till exempel är md5() snabbare och konstanter är flyttade till read-only minnet. Enligt uppgifter ska prestandan vara 5%-15% bättre.

Men det är inte bara förbättringar utan väldigt mycket nya funktioner också, Namespaces, Lambda, Closures, Late static binding och garbage collector är några av nyheterna. Jag tänkte gå igenom några av nyheterna och visa kodexempel. Jag kommer göra detta i två delar, i denna del kommer jag att titta på Lambda och Closures. Detta är nytt för mig så vi får se hur det går.

Lambda funktioner och Closures

Lambda eller anonyma funktioner är funktioner som kan skapas när som helst och är ofta knutna till en variabel. Har du programmerat javascript kommer du känna igen det.

Jag tänkte visa ett exempel där vi använder lambda ihop med funktionen array_filter.

$input = array('andreas', 'tord', 'bo', 'kim', 'johannes');
$output = array_filter($input, function ($v) { return strlen($v) > 3; });
print_r($output);

Vi börjar med att skapa arrayen input som innehåller ett antal namn. Vi använder sedan funktionen array_filter som tar $input och andra parametern är det som kallas Lambda eller anonyma funktioner.
Vi skapar alltså en anonym funktion, i denna funktionen kontrollerar vi vilka namn som är längre än tre tecken och returnerar dom.
Kollar vi på resultatet ser det ut som följande.

Bild 13

Som vi ser nu är bara tre namn kvar, de som är längre än tre bokstäver.

Closures

Att skapa anonyma funktioner har man kunnat göra tidigare med funktionen create_function(). Nu ska vi titta vidare på det som kallas Closures. Closures är nästan som anonyma funktioner med skillnaden att de känner till variabler som inte är skapade i sig själva.

Om vi tittar på exemplet nedan så har vi $globalVar som ligger utanför funktionen, denna kan vi sedan använda i funktionen genom att använda ordet use. Vi skickar den som referens genom att använda &.

$globalVar = 1;
$closure = function($arg) use (&$globalVar) {
	echo "Medskickad parameter: " . $arg . " - " . ++$globalVar;
};
$closure('Parameter 1') . "
"; $closure('Parameter 2') . "
";

Det här var två exempel på Lambda och Closures i nya PHP 5.3

Ny Magisk metod __invoke

Slutligen tänkte jag visa den nya magiska funktionen __invoke. Detta är en funktion som körs när man försöker köra ett objekt som en funktion, $object('hej').

class Demo{
	public function __invoke($args){
		echo $args;
	}
}
$object = new Demo();
$object('hej');

Anropar man nu objektet som som en funktion så kommer __invoke rycka och och i detta exemplet skriva ut ‘hej’.

Som jag nämnde tidigare såg är jag väldigt uppjagad över nya PHP och jag hoppas verkligen att flertalet webbhotell kommer uppgradera sina versioner inom kort.

5 Replies to “Nyheter i PHP 5.3”

  1. Jag hade i princip noll koll på nyheterna i PHP 5.3 så detta var en intressant post. Hoppas att det kommer lite längre exempel med påhittiga lösningar med de nya funktionerna framöver. Keep it up!

  2. Var i somras i kontakt med både Binero och Oderland ang. när de skulle gå över till PHP 5.3. Fick “snart” som svar då, men än har inget hänt… 🙁 Någon som vet något svenskt webbhotell som kör PHP 5.3?

    Jag tycker f.ö. att de mest intressanta nyheterna i 5.3 är late static binding och namespaces. Dessa gör det rätt mycket trevligare att skriva lite mer komplexa objektorienterade applikationer och förenklar implementation av vissa design patterns.

    1. Tyvärr vet jag inget webbhotell som erbjuder PHP 5.3 för tillfället, tyvärr. Någon annan som vet något webbhotell?

      Namespaces kan vara det bästa i den nya versionen och jag har planer på att skriva en del två där jag kommer visa exempel på namespaces.

Din kommentar eller åsikt