php

「$thisって誰だよ!」AIが書いたPHPに突然現れる謎の変数

AIにPHPを書いてもらった。

コードを確認してみると、見慣れないものが登場しました。

$this->name

……誰?

さらに読み進めると、

$this->loadData();

また出てきた。

$this->db

今度はデータベースまで持っている。

この $this、一体何者なんでしょうか?

今回は、PHPでよく使われる $this の正体を調査します。

難しいオブジェクト指向の授業にはしません。

今日の目標は、AIが書いたコードに $this が登場しても、慌てずに意味を読み取れるようになることです。

1. 事件発生!AIが書いたコードが読めない

お問い合わせフォームを作っているとしましょう。

AIに「送信された名前を保存する処理を書いて」とお願いしたところ、こんなコードが返ってきました。

class Contact
{
    public $name;

    public function setName($name)
    {
        $this->name = $name;
    }
}

$name は、なんとなく分かります。

名前が入っている変数でしょう。

しかし、

$this->name

こちらは何でしょうか?

$this という変数を作った覚えもありません。

検索してみると「オブジェクト指向」「インスタンス」「プロパティ」など、難しい言葉が次々に登場します。

……お問い合わせフォームを作りたかっただけなのに!

大丈夫です。

まずは必要な部分だけ理解しましょう。

2. AIと調査!$thisの正体

結論から説明します。

$this = 今、自分自身のオブジェクト

PHPでは、クラスから作られたオブジェクト自身を指すために $this を使います。

……これだけでは分かりにくいですね。

学校の名簿を想像してください。

名簿には、山田さん、田中さん、佐藤さんがいます。

それぞれ名前や年齢などの情報を持っています。

PHPでも、同じように人物の情報を管理できます。

例えば、人物を表す設計図を作ります。

class User
{
    public $name;
}

この class User が設計図です。

ここから実際のユーザーを作ります。

$yamada = new User();
$tanaka = new User();

$yamada->name = '山田';
$tanaka->name = '田中';

同じ設計図から作りましたが、それぞれ違う名前を持っています。

クラスとオブジェクトの関係

Userクラス

人物を作るための設計図

山田さん

name = 山田

田中さん

name = 田中

同じ設計図から、別々のオブジェクトが作られる。

そして、ここが重要です。

$this は、その処理を実行しているオブジェクト自身を指します。

山田さんのオブジェクトで実行すれば山田さん自身、田中さんのオブジェクトで実行すれば田中さん自身です。

3. 実際に$thisを動かしてみよう

先ほどのコードを少し変更してみます。

class User
{
    public $name;

    public function setName($name)
    {
        $this->name = $name;
    }
}

ここで登場する setName() は、名前を設定するための処理です。

実際に動かしてみましょう。

$yamada = new User();

$yamada->setName('山田');

echo $yamada->name;

実行結果は、

山田

です。

では、内部では何が起きているのでしょうか。

$this->name = $name;

この行を日本語に翻訳すると、

「今、この処理を実行しているオブジェクト自身の name に、受け取った名前を入れる」

となります。

$yamada->setName('山田') と呼び出したので、このときの $this は $yamada が参照しているオブジェクトです。

田中さんのオブジェクトで呼び出せば、田中さんの名前が変更されます。

4. 前回の授業とつながった!

ここで前回学んだ -> が登場します。

$this->name

分解してみましょう。

コード意味
$this現在のオブジェクト自身
->オブジェクトのメンバーにアクセス
name名前を保存するプロパティ

つまり、前回の授業が理解できていれば、今回のコードもかなり読めるはずです。

ちなみに、プロパティとは、オブジェクトが持っているデータのことです。

今回であれば name がプロパティに当たります。

難しい用語を一度に覚える必要はありません。

5. $thisは変数を作らなくても使えるの?

ここで疑問が生まれます。

普通の変数なら、

$name = '山田';

のように値を入れてから使います。

しかし $this は、

$this = ...;

と書いていません。

実は、PHPが自動的に用意してくれています。

ただし、どこでも使えるわけではありません。

基本的には、オブジェクトの通常のメソッド内で使用します。

例えば、次のようなコードは間違いです。

$this->name = '山田';

これをクラスの外に単独で書いても、通常は動きません。

また、クラス内でも static メソッドでは $this を使用できません。

今は「クラスの中なら何でも使えるわけではない」と覚えておきましょう。

6. 実際のWeb制作ではどこに登場する?

例えば、CodeIgniterなどのPHPフレームワークを使用すると、次のようなコードを見かけます。

class Contact
{
    private $message = '';

    public function setMessage($message)
    {
        $this->message = $message;
    }

    public function getMessage()
    {
        return $this->message;
    }
}

少し難しくなりましたね。

しかし、やっていることは単純です。

setMessage() でメッセージを保存し、getMessage() で保存したメッセージを取り出しています。

ここで $this が登場する理由は、同じオブジェクトが持つデータを別のメソッドからも利用するためです。

なお、フレームワークによっては、コントローラーやモデルなどで $this が頻繁に登場します。

その際も基本的な意味は同じです。

7. AIに質問するときのコツ

AIが生成したコードに、次のような処理が登場したとします。

$this->saveData($data);

意味が分からなければ、AIに質問してみましょう。

例えば、

このコードの $this は何を指していますか? saveData() はどこで定義されていますか? 初心者にも分かるように説明してください。

と聞いてみてください。

ただし、注意点があります。

この1行だけでは、saveData() が実際に何をするのかは分かりません。

メソッドの定義や関連するコードを確認する必要があります。

AIに質問するときは、前後のコードやクラス全体を渡すと、より正確な説明を得やすくなります。

今日の合格ライン

今日覚えて帰ること

$thisは現在のオブジェクト自身を指す->はオブジェクトのメンバーにアクセスする記号$this->nameは自身のnameプロパティを参照する$thisはどこでも使えるわけではない

0 / 4 項目を確認

全部を暗記する必要はありません。

AIが書いたコードに $this が出てきたら、「このオブジェクト自身のことだな」と理解できれば十分です。

ワンポイント答え合わせ

1. `$this` は何を指している?すべてのPHPファイル現在のオブジェクト自身現在アクセスしているURL

2. `$this->name` の意味は?現在のオブジェクトのnameにアクセスnameという新しいクラスを作成別のPHPファイルを読み込む

3. `$this` はクラスの外でも自由に使える?どこでも使える通常のオブジェクトメソッドなど、使用できる場所が決まっている

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

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

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

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