参照渡しを利用するとコードを追いにくくなるから利用は非推奨。特に関数の引数に利用するパターンはだめ。
参照渡しで行う実装は、参照渡しなしで実装できるからね。
でも他の人が書いたコードは読めないといけないし、改修しないといけないから。読める必要はあるよ。
もくじ
参照渡しによる 変数・配列の加工(非推奨)
引数の変数の左に&を加えることで加工処理に使えます。
<?php
$number = 1;
refSum($number);
echo $number;
unset($number); // unset()してメモリ解放おく
function refSum(int &$number): void
{
$number += 5;
}
引数に&$numberを入れることで加工できる
実行結果
6
ただこのパターンは追いにくくなるので利用しない
だから、
returnの形で使います
<?php
$number = 1;
$number = refSum($number);
echo $number;
function refSum(int $number): int
{
return $number += 5;
}
通常このように実装します。
配列の加工
まずは配列とループの基本原則
<?php
$users = [
[
'name' => "Yuu",
'skill' => ['Laravel', 'AWS']
],
[
'name' => "Nanasi3",
'skill' => ['LINE', '5ch']
],
];
$contents = [];
foreach ($users as $user) {
$contents[] = $user;
}
$users = $contents;
$users = json_encode($users);
var_dump($users);
一旦空の配列に入れて復元するよ
結果
[
{
"name": "Yuu",
"skill": [
"Laravel",
"AWS"
]
},
{
"name": "Nanasi3",
"skill": [
"LINE",
"5ch"
]
}
]
戻ったね。
この理解が大切。
参照渡しを使わないで加工するパターン
<?php
$users = [
[
'name' => "Yuu",
'skill' => ['Laravel', 'AWS']
],
[
'name' => "Nanasi3",
'skill' => ['LINE', '5ch']
],
];
foreach ($users as $key => $user) {
$users[$key]['enable'] = true;
}
$users = json_encode($users);
var_dump($users);
結果はもちろん同じだよ
[
{
"name": "Yuu",
"skill": [
"Laravel",
"AWS"
],
"enable": true
},
{
"name": "Nanasi3",
"skill": [
"LINE",
"5ch"
],
"enable": true
}
]
参照渡しを利用して加工するよ
<?php
$users = [
[
'name' => "Yuu",
'skill' => ['Laravel', 'AWS']
],
[
'name' => "Nanasi3",
'skill' => ['LINE', '5ch']
],
];
foreach ($users as &$user) {
$user['enable'] = true;
}
$users = json_encode($users);
var_dump($users);
引数が&$userになっている。enableプロパティを入れるよ
結果
[
{
"name": "Yuu",
"skill": [
"Laravel",
"AWS"
],
"enable": true
},
{
"name": "Nanasi3",
"skill": [
"LINE",
"5ch"
],
"enable": true
}
]
enableプロパティが追加できたね


