Laravel 9がそろそろリリースされますが、まだまだ新しい機能が追加されています。その中でも今回はいろんな文字列の生成について紹介したいと思います。
str() ヘルパーが追加された
str()
というヘルパーが追加されました。
これはどういうものかというと、以下のような処理をするだけのメソッドではあります。
if (! function_exists('str')) { /** * Get a new stringable object from the given string. * * @param string $string * @return \Illuminate\Support\Stringable */ function str($string) { return Str::of($string); } }
Strクラス(src/Illuminate/Support/Str.php
)のof()
を呼ぶだけですね。文字列からStringableオブジェクトを作成してくれます。
なので、例えば、str('string-value')
と書くだけで、string-value
の文字列が格納されたStringableオブジェクトを生成してくれます。
str()ヘルパーのデフォルト引数が追加された
上記のプルリクエストがマージされたあとに、以下の対応がマージされました。
str()ヘルパーの引数にデフォルト値が追加されています。
それに加えて、引数がなかった場合に、Strクラス()の動的メソッドを呼ぶような無名クラスが生成されています。
function str($string = null)
{
if (func_num_args() === 0) {
return new class
{
public function __call($method, $parameters)
{
return Str::$method(...$parameters);
}
};
}
return Str::of($string);
}
なので、str()
の戻り値自体は以下のような__call()
メソッドがあるだけの無名クラスになります。
class {
public function __call($method, $parameters)
{
return Str::$method(...$parameters);
}
};
さて、これをどう使うのでしょうか?
ランダムな文字列やuuidの生成ができる
上で説明した無名クラスを利用すれば、以下のようにStrクラスのメソッドを簡単に呼ぶことができるのです。
str()->random(16); // QDae31W1nFshBV97 str()->uuid(); // 85d57da7-12d0-4594-ad00-ff1eb1bcfff9
このように、文字数を指定してランダムな文字列を生成したり、uuidの生成をしたり、Strクラスに存在するstaticメソッドを利用することができます。
Str::random(16); // これまで
str()->random(16); // ヘルパの利用
このくらいの差なのかなと思うのですが、今後は違う書き方もできるようになりますね。