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つだけです。
->と=>は別物->は「そのオブジェクトが持っているもの」にアクセスするときに使う=>は「キーと値」を対応させるときによく使う->が連続していても、左から順番に分解すれば読める
これで十分です。
オブジェクト指向とは何なのか。
クラスとは何なのか。
メソッドとは何なのか。
そこまで今回全部覚える必要はありません。
まず、
$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の
という意味です。
ここまで読めたら、今日の授業は合格です。
AI時代だからこそ、磨こう。その腕。
AIは、
$user->name
も、
'name' => $user->name
も一瞬で書いてくれます。
だから、記号を全部暗記してコードをゼロから書ける必要はありません。
でも、
「AIが何を書いたのか分からない」状態のまま公開するのは危険です。
-> を見て何となく意味が分かる。
=> を見て配列だと気づく。
その小さな理解が積み重なると、AIが書いたコードを**「ただ貼る人」から「判断できる人」**へ少しずつ変わっていきます。
1から全部書く必要はない。
