📚
PHPで `->` と `=>` を混同したときに出やすいエラー
はじめに
Ruby on Railsを中心に学習中の初学者です。
今回はPHP✖️Laravelの投稿です。
備忘録として、躓いたことやケアレスミスも含め投稿します!誤っている箇所などありましたらご指摘いただけると幸いです
対象読者
- Ruby on Rails初学者
✅ -> と => を混同して出やすいエラー
1. 配列に -> を使ってしまう場合
❌ 間違いコード
$user = [
"name" => "Taro",
"email" => "taro@example.com"
];
echo $user->name; // エラー!
⚠️ エラー内容
Error: Trying to get property 'name' of non-object
🔹 原因
-
$userは 配列 -
->は オブジェクト用 - なのでエラーになる
✅ 修正方法
echo $user["name"]; // OK → "Taro"
2. オブジェクトに => を使ってしまう場合
❌ 間違いコード
$user = new stdClass();
$user => name = "Taro"; // エラー!
⚠️ エラー内容
Parse error: syntax error, unexpected '=>'
🔹 原因
-
=>は配列定義専用 - オブジェクトのプロパティ代入に使えない
✅ 修正方法
$user->name = "Taro"; // OK
3. LaravelでEloquentの返り値を配列のように扱う
❌ 間違いコード
$user = User::find(1);
echo $user["email"]; // エラー!
⚠️ エラー内容
Cannot use object of type App\Models\User as array
🔹 原因
-
User::find()はオブジェクトを返す - だから
->emailでアクセスすべき
✅ 修正方法
echo $user->email; // OK
4. DBクエリの結果をオブジェクトか配列か勘違い
Laravelの DB::select は配列を返します。
❌ 間違いコード
$users = DB::select('select * from users');
echo $users->name; // エラー!
⚠️ エラー内容
Trying to get property 'name' of non-object
🔹 原因
-
$usersは 配列 -
$users[0]が最初のオブジェクト
✅ 修正方法
echo $users[0]->name; // OK
✅ まとめ表
| 状況 | 間違った使い方 | エラー例 | 正しい書き方 |
|---|---|---|---|
配列に ->
|
$user->name |
Trying to get property of non-object |
$user["name"] |
オブジェクトに =>
|
$user => name |
syntax error, unexpected '=>' |
$user->name |
| Eloquentを配列扱い | $user["email"] |
Cannot use object of type ... as array |
$user->email |
| DB::selectの結果をオブジェクト扱い | $users->name |
Trying to get property 'name' of non-object |
$users[0]->name |
💡補足
Laravelを使う場合、**「今扱っているのが配列なのかオブジェクトなのか」**を常に意識するのがポイントです。
デバッグ時には dd($変数) や dump($変数) を使って中身を確認すると混乱を防げます。
Discussion