【PHP】返り値 nullableな型

php

状況

  • 返り値の型宣言で、検索対象のデータがnullであることを許容する場合。

nullを許容する型

  • 例えば、stringを返すとしている場合。nullをreturnすると、エラーになる。
  • PHP Fatal error: Uncaught TypeError: Return value must be of type string, null returned
function testReturn(): string
{
    return null;
}
var_dump(testReturn());
//PHP Fatal error:  Uncaught TypeError: testReturn(): Return value must be of type string, null returned
  • 戻り値の型宣言で nullを許容するには、「?+型」→「?string」とする(php7.1以降)。
    このようにすると、エラーは出ず、「NULL」が返される。
  • 想定される状況は、検索条件idに該当するデータの有無を確認する場合等。
<?php
function testReturn(): ?string
{
    return null;
}
var_dump(testReturn());
//NULL
?>
  • デフォルト値で「NULL」を想定している場合には、引数にnullを設定する。
  • デフォルトを宣言した場合、返り値の型宣言する場合、「?int」としないと上手くない。
<?php
function testReturn($a = null)
{
    return $a;
}
var_dump(testReturn());
//NULL
?>
<?php
function testReturn($a = null): int
{
    return $a;
}
var_dump(testReturn());
//PHP Fatal error:  Uncaught TypeError: testReturn(): Return value must be of type int, null returned
?>
<?php
function testReturn($a = null): ?int
{
    return $a;
}
var_dump(testReturn());
//NULL
?>
<?php
function testReturn(?int $a)
{
    return $a;
}
$b = null;
var_dump(testReturn($b));
//NULL
?>
<?php
function testReturn(?int $a , int $b): ?int
{
    return $a + $b;
}
$c = null;
$d = 1;
var_dump(testReturn($c,$d));
//int(1)
?>

参照

nullable な型
【PHP】引数の二種類の NULL 許容型の宣言方法とその違い

php, programming

Posted by 異世界攻略班