LoginSignup
19
13

More than 1 year has passed since last update.

PHP8.0からの便利な機能 ~3選~

Last updated at Posted at 2022-08-25

PHP8.0の新機能でよく使う機能を3つ紹介します:point_up::v:

1. match式

簡単な条件分岐処理はmatch式を使いましょう!

BEFORE:frowning2:

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:blush:

match式
$hoge = 1;
$fuga = match ($hoge) {
    1 => 'イチだよ',
    2 => 'ニだよ',
    3 => 'サンだよ',
    default => 'チガウヨ'
};

2. 名前付き引数

引数が多い時は名前付き引数の書き方も検討してみましょう!

BEFORE:frowning2:

第四引数のみ指定
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:blush:

第四引数のみ指定
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:frowning2:

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:blush:

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
    ) {}

少しでも不要なコードは書かない様に意識していきたいですね:point_up:

PHPリファレンス

PHP8.0新機能

19
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
13