LoginSignup
4
1

More than 5 years have passed since last update.

【Laravel】Arr::wrap()は必要か?

Last updated at Posted at 2019-04-25

Laravelのコードリーディングをしてる時に学んだことを書きます。

LaravelのArrクラスにwrapというメソッドががあります。
このメソッドは引数が

  • nullなら空の配列
  • 配列なら引数
  • それ以外なら引数を格納した配列

を返します。

Illuminate/Support/Arr.php
/**
 * If the given value is not an array and not null, wrap it in one.
 *
 * @param  mixed  $value
 * @return array
 */
public static function wrap($value)
{
    if (is_null($value)) {
        return [];
    }

    return is_array($value) ? $value : [$value];
}

(array)何が違うのか?と思ったわけです。
ですが、以下のコードを実行すると違いが明瞭になります。

PHP
use Illuminate\Support\Arr;
class A 
{
    public $a = 1;
}

$a = new A;

var_dump(
    Arr::wrap($a),
    (array)$a, 
);

/*
array(1) {
  [0]=>
  object(A)#324 (1) {
    ["a"]=>
    int(1)
  }
}
array(1) {
  ["a"]=>
  int(1)
}
*/

Arr::wrap($a)はオブジェクトを格納した配列を返しているのに対し、(array)$aはオブジェクトを配列に型変換しています。

そもそもラップと型変換は違う概念ですね。

結論

Arr::wrap()は必要。

4
1
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
4
1