PHP 5.3 er ferdig

PHP 5.3 er den siste store oppdateringen av det populære skriptingspråket før PHP 6 kommer. Mange av forbedringene er derfor i påvente av enda større forbedringer som skal komme i PHP 6.

Vi går litt inn i de viktigste nyhetene i denne nyheten, så om du ikke er en PHP-programmerer, er detaljene gjerne ikke så interessante.

Navnerom

Først og fremst har PHP 5.3 støtte for navnerom (namespaces), som skal gjøre det mulig å ha flere klasser med samme navn, så lenge de befinner seg i ulike navnerom. Det gjør det enklere å utvikle biblioteker som ikke påvirker andre biblioteker. Valget av delingstegn for navnerom har vært kontroversiell, siden man endte opp med backslash.

Navnerom settes øverst i en kildefil, og gjelder alle klassene i filen. Du definerer navnerom som følgende:

<?php
namespace Hardware\Artikkel;

class Nyhet { /* implementasjon */ }
class Text { /* implementasjon */ }
?>

Dette oppretter to klasser (Nyhet og Test) it Hardware\Artikkel-navnerommet. For å bruke Nyhet-klassen i en annen kildefil er syntaksen da $variabel = new Hardware\Artikkel\Nyhet();. Om du befinner deg i samme navnerom trenger du selvsagt ikke prefikse klassenavnet med navnerommet. Navnerom-systemet fungerer stort sett på samme måte som i andre programmeringsspråk.

Sen statisk binding

Om du har brukt statiske klasser som arver fra andre i PHP, har du kanskje kommet borti problemet. Du definerer en funksjon på superklassen, og i den vil du gjerne kalle en metode i subklassen. Uten å vite navnet på klassen har dette vært svært vanskelig i PHP til nå.

Problemet løses av sen statisk binding, som introduserer en ny måte å bruke nøkkelordet static på. Det fungerer på samme måte som self, men henviser til klassen som ble kalt under kjøring, ikke klassen metoden er definert i.

<?php
class Super
{
  public static function Foo()
  {
    echo __CLASS__; 
  }

  public static function Test()
  {
    static::who();
  }
}

class Sub extends Super
{
  public static function Foo()
  {
    echo __CLASS__; 
  }
}
Super::Test();
Sub::Test();
?>

Eksempelet over vil skrive ut først Super, så Sub. Om vi hadde brukt nøkkelordet self i Test-funksjonen, ville utskriften vært Super to ganger.

Goto

Nei, vi tuller ikke. Goto-konstrukter har blitt sterkt kritisert opp gjennom tidene, og det er ikke uten grunn. PHPs goto er ikke en fullverdig versjon av originalen her, men er begrenset til at den ikke kan hoppe ut av skopet.

Det betyr at du ikke kan bruke goto til å hoppe inn og ut av funksjoner, eller inn i looper eller switch-struktur. Du kan derimot bruke goto til å hoppe ut av de to sistnevnte. Et eksempel direkte fra PHP-manualen:

<?php
goto a;
echo 'Foo';
 
a:
echo 'Bar';
?>

Anonyme funksjoner

PHP 5.3 får støtte for ekte anonyme funksjoner, ofte kjent som closures. Dette lar deg opprette funksjoner som ikke har et navn i seg selv. Det gjør det mulig å sende inn f.eks. en sammenligningsfunksjon til en sorteringfunksjon uten at du trenger å navngi sammenligningsfunksjonen.

Dette betyr at du også svært enkelt kan lagre funksjoner i variabler. Denne funksjonaliteten har lenge vært tilgjengelig i andre programmeringsspråk, og gjør en rekke oppgaver mye enklere.

<?php
$hemmelig = function($parameter)
{
  echo $parameter,"\n";
};
$hemmelig("Hardware.no");
?>

Andre ting

Det er komt to nye magiske klassemetoder, __callStatic og __invoke. En ny måte å angi strenger på er støttet, kalt Nowdoc, og er egentlig Heredoc uten varibelsubstitusjon.

En kortversjon av ternær-operatoren er nå tilgjengelig, og gjør det enklere å for eksempel lage en default-verdi:

<?php
$a = ($_POST['data'] ? $_POST['data'] : 'default');
$b = ($_POST['data'] ?: 'default');
?>

Les mer

Det er snakk om ganske mange flere endringer i PHP 5.3, og dersom du er en utvikler som jobber med dette til daglig, anbefaler vi deg å lese gjennom listen over nye egenskaper, som også gir mange detaljer om de nye egenskapene.

Du kan laste ned PHP 5.3 fra PHP.net.

Kommentarer (20)

Norges beste mobilabonnement

Mars 2017

Kåret av Tek-redaksjonen

Jeg bruker lite data:

Komplett MiniFlex 1GB


Jeg bruker middels mye data:

Telio FriBruk 5GB+EU


Jeg bruker mye data:

Komplett MaxiFlex 10GB


Jeg er superbruker:

Komplett MegaFlex 30GB


Finn billigste abonnement i vår mobilkalkulator

Forsiden akkurat nå

Til toppen