In PHP 7: Return types

Toegevoegd door Wouter J, 5 jaar geleden

In PHP 7: Return typesPHP 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.

De syntax
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
function sum($a, $b): float {
    return (float) $a + $b;
}

?>

De functie sum mag in dit geval alleen een float teruggeven.

Geldige typen
Het type mag elke PHP type zijn (integer, float, string, boolean, etc.) of een class/interface naam. Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?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.

Gebruik bij classes
Bij het overschrijven van een method mag het type niet anders zijn dan het eerder opgegeven type. De volgende code is bijvoorbeeld niet geldig:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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.

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

Gerelateerde nieuwsberichten

02/08/2018 PHP brengt eerste beta uit voor PHP 7.3
04/01/2018 PhpMyAdmin was vatbaar voor ernstig veiligheidslek
20/07/2017 Vijf stappen om je website online te krijgen

 

Er zijn 8 reacties op 'In php 7 return types'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jordi Kroon
Jordi Kroon
5 jaar geleden
 
0 +1 -0 -1
In veel programmeertalen is deze syntax zelfs verplicht. Ik vind het zelf altijd heel netjes om te doen, voorkomt typecasting issues.

Nu nog de void type implementeren, dit staat op dit moment nog als "Future work".
Allow functions to declare that they do not return anything at all (void in Java and C)
Wouter J
Wouter J
5 jaar geleden
 
0 +1 -0 -1
Inderdaad Jordi, daar is ook al een RFC over gemaakt: https://wiki.php.net/rfc/void_return_type

Helaas is er nog erg veel discussie over, omdat dit een nieuw PHP type zal introduceren: void. Dit betekend dan ook dat een functie zonder return statement geen null meer returned, omdat het returnen van null niet meer void is. Tevens zou dan return; en return null; niet meer gelijk zijn (eerste zou void zijn en tweede null).
J C
J C
5 jaar geleden
 
0 +1 -0 -1
php7? Ik dacht dat we nog bij 5 waren////
Bart Matsko
Bart Matsko
5 jaar geleden
 
0 +1 -0 -1
PHP 7? We zijn toch nog maar bij PHP 5.5? Of bedoelen jullie PHP 5.7?
Wouter J
Wouter J
5 jaar geleden
 
0 +1 -0 -1
PHP 7 is de nieuwste major versie na PHP 5. Versie 6 wordt overgeslagen, zie ook de link in mijn reactie boven die van jouw.
Harry hogeveen
harry hogeveen
5 jaar geleden
 
0 +1 -0 -1
Types onderscheiden wordt steeds belangrijker in PHP zo te zien. PHP vond ik al een beetje een uitzondering omdat je bijvoorbeeld dit kon doen:
"10" + 10 // geeft 20
Dat kan lang niet in alle programmeertalen! Niet dat je ooit op deze manier moet programmeren, maar ik denk dat dit later ook niet meer kan in PHP. Bijvoorbeeld dat dan ook echt onderscheid wordt gemaakt tussen een Integer en een String
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Remco van Bers
Remco van Bers
5 jaar geleden
 
0 +1 -0 -1
De RFC van scalar type hints zit op v5 momenteel:
https://wiki.php.net/rfc/scalar_type_hints_v5

Foutje link momenteel in tekst.

Momenteel staat het er goed voor met nog 3 dagen stemmen in het vooruitzicht.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.