採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

new でインスタンスを作る

テクノロジ系 / class (class / new / プロパティ / メソッド / `$this` / コンストラクタ)

new でインスタンスを作る

Lesson 8 / Chapter 2

クラスは設計図、new で実体を作る

<?php
class User {
    public string $name;
    public int $age;
}

$taro = new User();
  • 設計図 (クラス) はそのままでは使えない
  • new User() で「設計図に従って 1 つ実体を作る」
  • 作ったものは変数に入れて持ち歩く

$taro の中身は「User という型の実体 (インスタンス)」。

プロパティに値を入れる

<?php
class User {
    public string $name;
    public int $age;
}

$taro = new User();
$taro->name = "太郎";

echo $taro->name . "\n";  // 太郎
  • $taro->name = "太郎";このインスタンスの name に値を入れる
  • $taro->name で取り出す
  • 矢印は -> (マイナスと不等号) で、間にスペースは入れない

同じクラスから何個でも作れる

<?php
class User {
    public string $name;
    public int $age;
}

$a = new User();
$a->name = "太郎";

$b = new User();
$b->name = "花子";

echo $a->name . "\n";  // 太郎
echo $b->name . "\n";  // 花子
  • new User() を呼ぶたびに 別の実体 が作られる
  • $a$b は中身が独立している (一方を変えても他方は影響しない)

インスタンスは設計図ごとに独立している

<?php
$a = new User();
$b = new User();

$a->name = "太郎";
// $b->name には何もしていない

echo $a->name . "\n";  // 太郎
// echo $b->name は「未設定」なので警告 (ch03 で扱う)
  • 同じクラスから作ったインスタンスでも、プロパティの中身は別物
  • 「設計図は 1 枚、家は何軒でも建つ」イメージ

このチャプターでできるようになること

new クラス名() でインスタンスを作れる

✅ インスタンスを変数に入れて持ち歩ける

$obj->prop = 値; で値を入れて $obj->prop で取り出せる

✅ 同じクラスから複数のインスタンスを作ると独立すると言える

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 01 — インスタンスを 1 つ作る

問題

User クラス (プロパティ public string $name;) を定義し、new User() で 1 つインスタンスを作り、name"太郎" を入れて出力してください。

期待される出力:

太郎

採点

php scripts/grade.php topics/class/ch02-new-instance/drill/01-create-one/

ヒント

  • class User { public string $name; } を書く
  • $u = new User(); でインスタンスを作る
  • $u->name = "太郎"; で値を入れる
  • echo $u->name . "\n"; で出力

ドリル 02 — インスタンスを 2 つ作る

問題

User クラス (プロパティ public string $name;) を定義し、new User()2 つ のインスタンスを作ってください。

  • 1 つ目の name には "太郎" を入れる
  • 2 つ目の name には "花子" を入れる

その後、2 つの name をこの順で出力してください。

期待される出力:

太郎
花子

採点

php scripts/grade.php topics/class/ch02-new-instance/drill/02-create-two/

ヒント

  • new User() を 2 回呼ぶと別々のインスタンスが作れる
  • それぞれ別の変数 ($a$b など) に入れる
  • 一方の name を変えても、もう一方には影響しない