Posted at

PHPの共変戻り値と反変パラメーターのRFC

PHPには共変戻り値(返り値)と反変パラメーター(引数)の機能がある。

http://php.net/migration72.new-features


<?php

function test(object $obj) : object
{
return new SplQueue();
}

test(new StdClass());


とは言っても、インターフェースを使ってサブクラスで戻り値を具象化するようなことはできなかった。

https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters


interface Factory {

function make(): object;
}

class UserFactory implements Factory {
function make(): User;
}


こういうことを出来るようにするRFC。

新機能に反変とか共変とか書いていたからてっきり出来るものだと思っていたらエラーになった。

Status は Accepted になっているけれど実装はいつだろう。

時々しか使わないけれど、この影響で継承やインターフェースを使うクラスだけ型を書かないというような状況になってしまうんだよね。

インターフェースを使うには型を緩くしないといけないとか本末転倒な感じがある。