🐙

Laravel Arrクラスを使って型指定で値を取得する

に公開

はじめに

先日こんな機能がリリースされた。

https://laravel-news.com/laravel-12-11-0#content-typed-getters-for-arr-helpers

Illuminate\Support\Arrクラスを使って配列から値を取得する時に型を指定することが出来るようになったようだ。

どのようなものか少し見てみることにした。

型とメソッド

対応している型はarray, boolean, float, integer, stringの5種類
それぞれどのメソッドを使うのか表にまとめてみた。

メソッド
array array
boolean boolean
float float
integer integer
string string

まとめてみたけど、型とメソッド名が同じだったのでわかりやすいですね。
ついでにマニュアルへのリンクも載せておきます。

使う

メソッドがわかったので少しだけ試してみます。

テストデータはこちらを使う。(リリースノートに書いてあった配列を少し変えただけ。)

$array = ['name' => '太郎', 'languages' => ['PHP', 'Ruby']];

上記配列をArr::arrayメソッドを使った場合はこんな感じでした。

※実行はtinkerを使っています。

> use Illuminate\Support\Arr;
> $array = ['name' => '太郎', 'languages' => ['PHP', 'Ruby']];
= [
    "name" => "太郎",
    "languages" => [
      "PHP",
      "Ruby",
    ],
  ]

> Arr::array($array, 'languages');
= [
    "PHP",
    "Ruby",
  ]

> Arr::array($array, 'name');

   InvalidArgumentException  Array value for key [name] must be an array, string found.

> 

リリースノート通りですね。配列は取得できて、文字列だと例外が起きる。

逆にArr::stringメソッドを使った場合はどうなるかやってみる。

> use Illuminate\Support\Arr;
> $array = ['name' => '太郎', 'languages' => ['PHP', 'Ruby']];
= [
    "name" => "太郎",
    "languages" => [
      "PHP",
      "Ruby",
    ],
  ]

> Arr::string($array, 'name');
= "太郎"

> Arr::string($array, 'languages');

   InvalidArgumentException  Array value for key [languages] must be a string, array found.

> 

stringの場合は文字列は取得できて、配列の場合は例外になりました。

他の型もきっと同じ結果ですね。

このメソッドを追加したプルリクエストを見る限り、
取得する値がメソッドと同じ型の場合は取得できて、それ以外だと例外になるようです。

https://github.com/laravel/framework/pull/55567

使う用途としては、取得した値の型の判定を行う必要がなくなることでしょうかね。
逆に例外を考慮する必要があるので、どちらがいいのかってところでしょうか。

このへんは好みかもしれないですね。

まとめ

マニュアルをみたら答えが書いてあることですが自分なりに少し見てまとめてみました。

実際に使う日がくるかはわからないですが、その日が来たら役に立つことでしょう。(たぶん)

補足

configへルパでも同様のことが出来るようです。

https://github.com/laravel/framework/pull/50140

Laravelは配列の中身を取得する方法がいろいろ変化してきたのかもしれない。

ただ、Envへルパにも追加しようとするプルリクエストがありましたがこちらは残念ながらクローズになっていました。

https://github.com/laravel/framework/pull/55658

GitHubで編集を提案

Discussion