📚

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