PHP
Laravel

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

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()は必要。