php

「-> と =>、何が違うの?」PHPの矢印記号を読めるようになろう

AIにPHPを書いてもらいました。

コードを見てみると――

$user->name

少し下には、

[
    'name' => 'みのり',
    'age'  => 18
]

……矢印が2種類ある。

->
=>

似ている。

ものすごく似ている。

でも、意味はまったく違います。

今回の事件は、

「AIが書いたPHPに矢印がいっぱい出てきたけど、何をしているのか分からない!」

です。


事件発生:AIのコードに謎の矢印

たとえばAIに、

ユーザー情報を表示するPHPを書いて

とお願いしたら、こんなコードが返ってきたとします。

echo $user->name;

さらに別の場所には、

$data = [
    'name' => 'Yamada',
    'age'  => 25
];

初心者からすると、

->
=>

は「なんか似たような矢印」に見えます。

でもPHPでは、この2つを区別できるだけでコードがかなり読みやすくなります。

今日のゴールは、完璧に使いこなすことではありません。

コードを見たときに「こっちはアレだな」と判断できれば合格です。


まず結論

ものすごく簡単に言うと、

記号主な意味
->オブジェクトの中を見る
=>配列で「キーと値」を結びつける

まずはこれだけ覚えてください。

$user->name

なら、

$user の中にある name

というイメージ。

一方、

'name' => 'Yamada'

なら、

name という名前に Yamada という値を対応させる

というイメージです。


=> は「この名前には、この値」

まず簡単なほうからいきましょう。

PHPでは配列をこんなふうに書けます。

$user = [
    'name' => 'Yamada',
    'age'  => 25
];

これは、

name → Yamada
age  → 25

という対応関係を作っています。

つまり、

=>

は、

「このキーには、この値」

くらいに考えてOKです。

値を取り出すときは、

echo $user['name'];

です。

結果は、

Yamada

になります。


じゃあ -> は何?

こちらは主にオブジェクトで登場します。

たとえば、

$user->name

なら、

$user というオブジェクトが持っている name

を参照しています。

さらに、

$user->getName();

のようなコードもあります。

今度は、

$user が持っている getName() という処理を実行する

という意味です。

ここで大事なのは、

$user['name']

と、

$user->name

は、見た目は似ていても同じものではないことです。


AIにPHPを書かせると -> が急に増える理由

初心者向けのPHPでは、

$name = $_POST['name'];

のようなコードが多いでしょう。

ところがフレームワークやライブラリを使い始めると、

$request->getPost('name');

だったり、

$db->table('users');

だったり、

$query->getResult();

だったりします。

突然、

->
->
->

だらけになります。

CodeIgniterなどを触っていると、特によく見かけます。

でも、基本的な読み方は同じです。

たとえば、

$request->getPost('name');

を見たら、

$request
   ↓
その中にある
   ↓
getPost()

くらいに分解して読めばOKです。


-> が連続していたらどう読む?

AIがこんなコードを出してくることもあります。

$db->table('users')->where('id', 1)->get();

うわっ。

矢印が3つある。

でも慌てる必要はありません。

ざっくり左から、

$db

↓ table()

usersテーブルを対象にする

↓ where()

idが1のものに絞る

↓ get()

取得する

という流れです。

つまり、

$db
    ->table('users')
    ->where('id', 1)
    ->get();

と改行すると、かなり見やすくなります。

AIが1行で出してきて分かりにくければ、

「処理の意味が分かるように改行してください」

と頼んでもいいでしょう。

AI時代は、コードを全部暗記するより、読める形に変換させる力も重要です。


=> もAIのコードでは大量に出てくる

こちらもよくあります。

$data = [
    'title'   => 'お問い合わせ',
    'name'    => $name,
    'email'   => $email,
    'message' => $message
];

難しそうに見えますが、やっていることは単純です。

title   → お問い合わせ
name    → $name
email   → $email
message → $message

情報をひとまとめにしているだけです。

つまり => を見たら、

「名前と値をセットにしているのかな?」

と考えてみてください。

かなりの確率でコードが読めるようになります。


よくある勘違い:=> は「以上」ではない

記号だけ見ると、

=>

なので、

大なりイコール?

と思うかもしれません。

違います。

「以上」は、

>=

です。

$age >= 18

なら、

ageが18以上

です。

一方、

'age' => 18

なら、

ageというキーに18を対応させる

です。

並べると、

=>  配列などのキーと値

>=  以上

まったく別物です。


AIに聞くなら「このコード全部説明して」より分解する

AIが生成したコードで、

$result = $db->table('users')
             ->where('status', 1)
             ->get()
             ->getResult();

が分からなかったとします。

そんなとき、

このコードを説明して

でも構いません。

ただ、初心者のうちは、

$db->table('users') は何をしていますか?

↓

->where() は何をしていますか?

↓

->get() は何をしていますか?

のように、小さく区切って質問するのがおすすめです。

AIから長大な説明が返ってきて、さらに分からなくなるのを防げます。


今日の合格ライン

今回、覚えて帰ってほしいのは4つだけです。

  1. -> と => は別物
  2. -> は「そのオブジェクトが持っているもの」にアクセスするときに使う
  3. => は「キーと値」を対応させるときによく使う
  4. -> が連続していても、左から順番に分解すれば読める

これで十分です。

オブジェクト指向とは何なのか。

クラスとは何なのか。

メソッドとは何なのか。

そこまで今回全部覚える必要はありません。

まず、

$user->name

を見て、

「あ、$user の中にある name を見てるんだな」

そして、

'name' => 'Yamada'

を見て、

「nameとYamadaを対応させてるんだな」

と判断できれば合格です。


ワンポイント答え合わせ

最後に問題です。

次のコードを見てください。

$data = [
    'name' => $user->name,
    'email' => $user->email
];

今回は、

=>

と、

->

が同じ行に登場しています。

何をしているでしょう?

少し考えてみてください。

答えは――

$user->name

で $user から名前を取り出して、

'name' => その値

として配列に入れています。

つまり、

$user
  ↓
nameを取り出す
  ↓
'name'というキーに入れる

です。

同じように、

'email' => $user->email

も、

$user の email を取り出して、email というキーに入れる

という意味です。

ここまで読めたら、今日の授業は合格です。


AI時代だからこそ、磨こう。その腕。

AIは、

$user->name

も、

'name' => $user->name

も一瞬で書いてくれます。

だから、記号を全部暗記してコードをゼロから書ける必要はありません。

でも、

「AIが何を書いたのか分からない」状態のまま公開するのは危険です。

-> を見て何となく意味が分かる。

=> を見て配列だと気づく。

その小さな理解が積み重なると、AIが書いたコードを**「ただ貼る人」から「判断できる人」**へ少しずつ変わっていきます。

1から全部書く必要はない。

☆ この授業をあとで見返す

学生登録(無料)すると、お気に入りに保存できます。授業は登録しなくても読めます。

☆ この授業をあとで見返す

学生登録(無料)すると、お気に入りに保存できます。授業は登録しなくても読めます。