PHP8.0の新機能でよく使う機能を3つ紹介します
1. match式
簡単な条件分岐処理はmatch式を使いましょう!
BEFORE
if文
$hoge = 1;
if ($hoge === 1) {
$fuga = 'イチだよ';
else if ($hoge === 2) {
$fuga = 'ニだよ';
else if ($hoge === 3) {
$fuga = 'サンだよ';
} else {
$fuga = 'チガウヨ';
}
switch文
$hoge = 1;
switch ($hoge) {
case 1:
$fuga = 'イチだよ';
break;
case 2:
$fuga = 'ニだよ';
break;
case 3:
$fuga = 'サンだよ';
break;
default:
$fuga = 'チガウヨ';
break;
}
AFTER
match式
$hoge = 1;
$fuga = match ($hoge) {
1 => 'イチだよ',
2 => 'ニだよ',
3 => 'サンだよ',
default => 'チガウヨ'
};
2. 名前付き引数
引数が多い時は名前付き引数の書き方も検討してみましょう!
BEFORE
第四引数のみ指定
class Hoge
{
public function manyArgs(
bool $one = true,
int $two = 2,
string $three = 'サン',
float $four = 4.1
): string {
// 省略
}
}
/**
* $fourだけ指定したい!それ以外は初期値でいい!
* 第一引数から第三引数も書かないといけない・・・
* /
$Hoge = new Hoge(true, 2, 'サン', 4.9);
AFTER
第四引数のみ指定
class Hoge
{
public function manyArgs(
bool $one = true,
int $two = 2,
string $three = 'サン',
float $four = 4.1
): string {
// 省略
}
}
/**
* 第四引数のみ指定できる!
* /
$Hoge = new Hoge(four: 4.9);
3. コンストラクタのプロパティ昇格
プロパティ宣言をコンストラクタ引数でまとめてしまいましょう!
Laravelを想定したコードです
BEFORE
repositoryクラスを依存注入
use xxxx\xxxx\HogeRepository;
use xxxx\xxxx\FugaRepository;
use xxxx\xxxx\PiyoRepository;
class xxxxxServiceClass
{
// 1.ここでプロパティを宣言して・・・?
private HogeRepository $HogeRepository;
private FugaRepository $FugaRepository;
private PiyoRepository $PiyoRepository;
public function __construct(
// 2.ここで注入するクラスを設定して・・・??
HogeRepository $HogeRepository,
FugaRepository $FugaRepository,
PiyoRepository $PiyoRepository
) {
// 3.ここで各プロパティにインスタンスオブジェクトを設定して・・・???
$this->HogeRepository = $HogeRepository;
$this->HogeRepository = $HogeRepository;
$this->HogeRepository = $HogeRepository;
}
AFTER
repositoryクラスを依存注入
use xxxx\xxxx\HogeRepository;
use xxxx\xxxx\FugaRepository;
use xxxx\xxxx\PiyoRepository;
class xxxxxServiceClass
{
public function __construct(
// 1.これでプロパティ宣言もできる!
private HogeRepository $HogeRepository,
private FugaRepository $FugaRepository,
private PiyoRepository $PiyoRepository
) {}
少しでも不要なコードは書かない様に意識していきたいですね