PHP8.1新機能紹介 Pure Intersection Types

Type Hintingに複数の型を同時に満たすものを指定できるようになった。

下記の例のようにinstance of などでエラーチェックが省ける。
大規模な開発をする際にには役立つような気がする。

<?php

interface IStatus{
    function getStatus():int;
    function setStatus(int $stat):void;
}

class StatusBase{
    protected int $status = 1;
    public function getStatus():int{
        return $this->status;
    }
}

class ServerStatus extends StatusBase implements IStatus{
    public function setStatus(int $stat):void{
        $this->status = $stat;
    }
}

class ServerHealth extends StatusBase{
}

// StatusBaseかつIStatusという型のみ受け付ける
function intersection_types_test(StatusBase&IStatus $stat){
    $stat->setStatus(random_int(0,255));// instance ofなどの型チェック不要で実行できる
    echo $stat->getStatus().PHP_EOL;
}

$ss = new ServerStatus();
$sh = new ServerHealth();

intersection_types_test($ss);// 1
intersection_types_test($sh);// Fatal error: Uncaught TypeError:
カテゴリー: php

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です