Nieuws

In PHP 7: Return types

PHP 7 heeft afgelopen week een belangrijke feature erbij gekregen: Return types.

Met deze feature kunnen functies geforceerd worden om een bepaald type terug te geven.

[size=kop]De syntax[/size]
De syntax is gelijk aan de syntax die gebruikt wordt in Hack: Een dubbele punt gevolgd door het type dat achter de argument lijst wordt geplaatst.
<?php
function sum($a, $b): float {
return (float) $a + $b;
}
?>
De functie sum mag in dit geval alleen een float teruggeven.

[size=kop]Geldige typen[/size]
Het type mag elke PHP type zijn (integer, float, string, boolean, etc.) of een class/interface naam. Bijvoorbeeld:
<?php
class UserRegistry
{
// ...

public function getUser($name): User
{
return $this->users[$name];
}
}
?>
Het is op het moment niet geldig om null terug te geven wanneer het return type gedefinieerd is. Er is een lopende RFC om een ? prefix te gebruiken om aan te geven dat een type null of het aangegeven type mag zijn. Hier is momenteel nog geen beslissing over gemaakt.

[size=kop]Gebruik bij classes[/size]
Bij het overschrijven van een method mag het type niet anders zijn dan het eerder opgegeven type. De volgende code is bijvoorbeeld niet geldig:
<?php
class PageRepository
{
// ...

public function get($name): Page
{
// ... haal de page op
}
}

class BlogPostRepository extends PageRepository
{
// ...

public function get($slug): BlogPost
{
// ... haal de blog post op
}
}
?>
Het is wel geldig om een type te definiëren wanneer de method eerder geen type definitie had.
Het is daarnaast ook verplicht om het type van een method te definiëren wanneer de parent method deze ook gedefinieerd heeft.

Geen één van de functies en methods in core PHP hebben op dit moment een return type gedefinieerd.
De volledige RFC is te vinden in de RFC lijst.

[size=kop]Argument Types[/size]
Er is nog een lopende RFC voor het definiëren van types voor argumenten. De stemming hiervoor zal komende week eindigen.

Reacties

0
Nog geen reacties.