付録:クラスとオブジェクト

クラスとは?

  • クラス(class とは、「機能やデータをまとめた設計図」のことです。
  • 実際にその設計図から使える形にしたものを インスタンス(またはオブジェクト) と呼びます。

関数との違い

<?php
// 関数(function)で挨拶
function sayHello($name) {
    return "こんにちは、{$name}さん!";
}

echo sayHello("山田");

関数は1回の動作に向いています。

クラスで同じことをやってみよう!

<?php
class Greeting {
    public $name;

    public function sayHello() {
        return "こんにちは、{$this->name}さん!";
    }
}

// クラスから「実体」を作る(インスタンス化)
$greet = new Greeting();
$greet->name = "山田";
echo $greet->sayHello();
  • class Greeting:設計図のはじまり
  • $name:オブジェクトが持つデータ → プロパティ
  • sayHello():オブジェクトの動き → メソッド
  • $this->name:そのオブジェクトの自分の名前、という意味

「new」を使って何度でも作れる

<?php
$g1 = new Greeting();
$g1->name = "山田";

$g2 = new Greeting();
$g2->name = "佐藤";

echo $g1->sayHello(); // 山田さんにあいさつ
echo $g2->sayHello(); // 佐藤さんにあいさつ
  • クラス(設計図)が1つあれば、何人でも作れます!

クラスは「function」より整理しやすい

function profile($name, $age, $job) {
    return "{$name}さん({$age}歳)は、{$job}です。";
}

でもクラスを使うと・・・

class Person {
    public $name;
    public $age;
    public $job;

    public function profile() {
        return "{$this->name}さん({$this->age}歳)は、{$this->job}です。";
    }
}

$p = new Person();
$p->name = "田中";
$p->age = 30;
$p->job = "デザイナー";

echo $p->profile();
  • まとまっていてわかりやすくなる

これが「オブジェクト指向」の入口

  • オブジェクト(データ)と、その動き(関数)をひとまとめにできる考え方を
    オブジェクト指向(Object-Oriented)と呼びます。
  • PHPも「オブジェクト指向に対応した言語」です。

PDOもクラス

$pdo = new PDO("mysql:host=localhost;dbname=sample", "root", "");

この new PDO(...) も、

  • PDO というクラス(設計図)が用意されていて、
  • new でインスタンスを作って、
  • $pdo->prepare()$pdo->query() を使っている

PHPのクラスは、こういうところでもすでにたくさん使われているのです!

課題:自己紹介クラスを作ってみよう!

class Profile {
    public $name;
    public $age;
    public $job;

    public function show() {
        // ここに表示用の文章を返す
    }
}

$p = new Profile();
$p->name = "あなたの名前";
$p->age = 20;
$p->job = "プログラマー";

echo $p->show();

「〇〇さん(20歳)は、プログラマーです。」と表示されるように完成させてみましょう!