エンジニアのひよこ_level10

【毎日更新!】新卒2年目エンジニアブログです! プログラムだけじゃなく、マネジメントとかも書いていきたい!

【PHP】returnを返さなかったときはどうなる?voidじゃない?【512日目】

こんなプログラムがあったとき

public function foo($key, $array)
{
    if($key != null) {
        return $array[$key];
    }
}

このプログラム、もし$keyがnullだったとき、returnを通らないです。どうなるでしょう。

return nullされる

http://php.net/manual/ja/functions.returning-values.php

return を省略した場合は NULL を返します。

ということで、return nullされます。
すると、きっと2つ程疑問が出ると思います。

voidじゃないの?

PHP: 新機能 - Manual

返り値の型として void が導入されました。返り値の型を void と宣言した関数は、関数内での return 文を省略するか、あるいは空の return を使う必要があります。 void 関数から NULL を返すことはできません。

void 関数の返り値を使おうとした場合はその値は NULL と評価されます。 警告は発生しません。警告を発生させると、一般的な高階関数の利用にも影響するからです。

ざっくりいうと、

『voidという値は存在しなくて、voidとは意味のない値を指す』
『意味のない値なので、returnがvoidのときは、そのreturn値を使うことはできない』

return nullは明記しなきゃいけないの?

public function foo($key, $array)
{
    if($key != null) {
        return $array[$key];
    }
    return null;
}

こう書かなければいけないというのは、PSRなどで決められていません。
但し、極力明記するべきだと思います。

可読性も上がりますし、そもそもコードで検討忘れだったりするかもしれません。
明記することで、関数に対する意味などと正しく定義しやすくなります。

あるいは、以下のように書き換えることもできます。

public function foo($key, $array)
{
    if($key == null) {
        return null;
    }
    return $array[$key];
}

極力、他の人のためにも、明記するほうが良いでしょう。