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