オブジェクト型の使い方
「モノ(オブジェクト)」の設計図(クラス)を作って、それを組み立てて(インスタンス化して)、動かす仕組みのことです。
たとえば、「猫」という設計図(クラス)を作ると、「タマ」「ミケ」などの実物(インスタンス)を作ることができます。
これにより、「デバッグ」「メンテナンス」「コード利用」を容易にし複雑なシステムを、正規化・標準化できるようにしています。
オブジェクト型 はデータ構造(プロパティ) と 関数(メソッド) が合わさった型になります。
クラスとインスタンス(基礎)
✅ クラスとは?
「プロパティ(データ)」と「メソッド(処理)」をセットにした“設計図”です。
記述内容を実際にWebサーバに出してみよう!
|
1 2 3 4 5 6 7 8 9 |
<?php class Cat { public $name = "ミケネコ"; // プロパティ(変数) public function cry() { // メソッド(関数) return "ニャー"; } } |
✅ インスタンスとは?
クラスを元にして作った「実物」です。new を使って作ります。
|
1 2 3 4 5 |
<?php $cat = new Cat(); // クラスからオブジェクトを生成 echo "名前:" . $cat->name; // プロパティにアクセス echo "鳴き声:" . $cat->cry(); // メソッドを呼び出し |
🔷 アクセス修飾子(public / private / protected)
| 修飾子 | アクセスできる範囲 |
|---|---|
public | どこからでもアクセスOK |
protected | クラス自身と継承したクラスからOK |
private | クラス自身のみOK(外からはアクセス不可) |
記述内容を実際にWebサーバに出してみよう!
|
1 2 3 4 5 6 7 8 9 10 |
<?php class Sample { //クラス内からのみアクセス可能です。 private $name = "名前"; } $obj = new Sample(); print $obj->name; // privateで定義しているため、参照できなく、エラーになる |
🔷 コンストラクタ(__construct)
インスタンスを作った直後に、自動で呼ばれる特別なメソッドです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Post { public $author; public function __construct($name) { $this->author = $name; } public function show() { echo "投稿者は " . $this->author; } } $post = new Post("鈴木"); $post->show(); // → 投稿者は 鈴木 |
🔷 メソッド(関数)
クラス内で定義される関数のこと。オブジェクトに「ふるまい(機能)」を与えます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Staff { public $name; public function __construct($name) { $this->name = $name; } public function hello() { echo "こんにちは!私は $this->name です。"; } } $staff = new Staff("田中"); $staff->hello(); // → こんにちは!私は 田中 です。 |
🔷 クラスの継承
あるクラスをベースに、新しいクラスを作る機能。共通の機能を再利用できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Animal { public function walk() { echo "歩きます"; } } class Dog extends Animal { public function bark() { echo "ワン!"; } } $dog = new Dog(); $dog->walk(); // 親クラスのメソッド $dog->bark(); // 子クラス独自のメソッド |
補足
classを継承するためには「extends」キーワードを使用します。
class 子クラス名 extends 親クラス { }
※ praivate function(){} と記述して、継承しても使用できません。publicをつかってください。
🔷 カプセル化(encapsulation)
内部の状態(プロパティ)をprivateにして、必要な処理だけをpublicで公開し、外部からの不正アクセスや変更を防ぎます。
記述内容を実際にWebサーバに出してみよう!
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php class BankAccount { private $balance = 0; public function deposit($amount) { $this->balance += $amount; } public function getBalance() { return $this->balance; } } $account = new BankAccount(); $account->deposit(1000); echo $account->getBalance(); // → 1000 |
🔷 実践:複数の投稿を扱うクラス
記述内容を実際にWebサーバに出してみよう!
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php class Post { public $text; public $likes; public function show() { echo "{$this->text} ({$this->likes} いいね)<br>"; } } $posts = []; $posts[0] = new Post(); $posts[0]->text = "Hello PHP!"; $posts[0]->likes = 10; $posts[1] = new Post(); $posts[1]->text = "オブジェクト指向楽しい!"; $posts[1]->likes = 20; $posts[0]->show(); $posts[1]->show(); |
✅ まとめ
| 用語 | 意味 |
|---|---|
| クラス | 設計図 |
| インスタンス | 実物(オブジェクト) |
| プロパティ | オブジェクトが持つデータ |
| メソッド | オブジェクトができること(関数) |
| アクセス修飾子 | アクセスできる範囲を制限するキーワード |
| コンストラクタ | newされたときに自動実行される関数 |
| 継承 | 他のクラスの機能を引き継ぐ |
| カプセル化 | 内部のデータを守る考え方 |
課題
以下の仕様に従い、Personクラスを継承して、
**患者クラス(Patient)**
を作成してください。患者情報を保持し、自己紹介や標準体重の計算を行うクラスを設計します。
正しく表示されていることを確認できましたら
GitHubにPushしてマージリクエストしてレビューをかけてください。
目的:
- PHPの「クラス定義」「継承」「カプセル化(private)」「コンストラクタ」「メソッド定義」などの基本構文を理解する。
- 親クラスのプロパティやメソッドを活用できるようになる。
selfIntroduction()などのメソッドを再利用して出力を組み立てる練習をする。
ファイル構成
|
1 2 3 4 5 |
index.php:インスタンスを生成して表示 Person.php:人間の基本情報を持つクラス Patient.php:Personを継承した患者クラス |
実装指示
✅ 1. Person.php を作成しよう
以下のプロパティ・メソッドを持つクラス Person を作成:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class Person { private $name; private $age; private $gender; public function __construct($name, $age, $gender) { // 各プロパティを初期化 } public function selfIntroduction() { // 「私は〇〇、〇才、男性(または女性)です。」という文字列を返す } public function addAge() { // 年齢を1つ加算する } } |
✅ 2. Patient.php を作成しよう
Person クラスを継承した Patient クラスを作成し、以下のプロパティとメソッドを追加してください:
■ プロパティ(private)
height(身長m)weight(体重kg)
■ コンストラクタ
Patientクラスの__construct()で、親クラスの__construct()を呼び出し、heightとweightも初期化する。
■ メソッド
getHeight():身長を返すgetWeight():体重を返すcalculateStandardWeight():身長(m)を元に標準体重(22 × 身長 × 身長)を返す
出力例(index.php)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php //クラスファイルを読み込む require_once 'Patient.php'; ?> <!DOCTYPE html> <html lang="ja"> <meta charset="utf-8"> <head> <title>techUP オブジェクト指向 課題</title> </head> <body> <?php //インスタンスを生成する $patient = new Patient('山田太郎', 30, 'm', 1.65, 63.5); print($patient -> selfIntroduction()); print('<br>身長:' . $patient -> getHeight() . 'm'); print('<br>体重:' . $patient -> getWeight() . 'kg'); print('<br><br>'); print('標準体重は' . $patient -> calculateStandardWeight() . 'kgです。'); ?> </body> </html> |
表示結果の例:
|
1 2 3 4 |
わたしは山田太郎、30才、男性です。 身長:1.65m 体重:63.5kg 標準体重は59.7525kgです。 |
ヒント
privateで宣言したプロパティ($name, $age, $gender)は、外から直接アクセスできないため、
コンストラクタで値を代入します。
性別は「m」なら男性、「f」なら女性、それ以外は「不明」と表示します。
|
1 2 3 |
├── index.php :インスタンス生成・表示(メイン処理) ├── Person.php :Person(人)の基本クラス └── Patient.php :Patient(患者)のクラス(Personを継承) |
Patient.php を作成しよう
atient クラスでは、Person クラスを継承します(extends を使う)
親クラスのコンストラクタは parent::__construct(...) で呼び出します。
身長(m)と体重(kg)は自分のクラスで新しくプロパティとして定義します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Patient extends Person { private $height; private $weight; public function __construct($name, $age, $gender, $height, $weight) { // Personクラスのコンストラクタを先に呼び出す // そのあと、自分のプロパティも代入 } public function getHeight() { // 身長を返す } public function getWeight() { // 体重を返す } public function calculateStandardWeight() { // 身長×身長×22 を計算して返す(標準体重の計算) } } |
課題・復習用検索キーワード
| 検索例 |
| 🔍php require 役割 |
| 🔍php $this-> とは |
| 🔍php IT デバッグ |