PHP

PHP 参照渡しによる加工処理

 

参照渡しを利用するとコードを追いにくくなるから利用は非推奨。特に関数の引数に利用するパターンはだめ。

 

参照渡しで行う実装は、参照渡しなしで実装できるからね。

でも他の人が書いたコードは読めないといけないし、改修しないといけないから。読める必要はあるよ。

参照渡しによる 変数・配列の加工(非推奨)

引数の変数の左に&を加えることで加工処理に使えます。

<?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プロパティが追加できたね

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)