Laravelの「==」と「===」違い - Hashimoto-Noriaki/laravel-php-memo GitHub Wiki

投稿日 2023年04月17日

この記事の背景

ユーザーの編集画面を実装していた時にはまってしまいました。

public function edit($id)
    {
        if ($id === \Auth::id()) {
 #省略
}

この時に条件式の違いを知りました。

===は「格納された値」と「データ型」までを含めた一致かどうかの判定を===は行う みたいです。

実際に実装で使った例


        if (\Auth::id() === $user->id) {
            $user->delete();
        }    

の中で===を使っています。ChatGPIで調べたことですが、\Auth::id()で取得される値は整数であるため、==を使って比較してもいいみたいですが===を使った時、値と型の両方が一致する必要があるため、厳しめの比較になります。

例えば、'1' == 1はtrueですが、'1' === 1はfalseになります。

if (\Auth::id() == $user->id)に変更しても、比較結果は同じで削除ができる条件は変わりませんが、 値と型の両方を比較する\Auth::id() === $user->idの方が、より厳しめの条件で 削除を制限できます。

資料

https://plugmize.jp/archives/blog/20161118_diff_equals.html

https://magazine.techacademy.jp/magazine/27937