[PHP] クラス
PHPのクラスの基本を復習メモです。
書きかけなので復習を繰り返すと増えていくかも。
基本的なコード
1<?php
2
3class Hero
4{
5 public $name = 'Hero';
6
7 public function showName()
8 {
9 echo $this->name, "\n";
10 }
11}
12
13$hero = new Hero();
14$hero->showName();
クラスの生成: newキーワード
クラスを生成する時はnewキーワードを使う。
先程のHeroクラスを生成するコードはこんな感じ。
Heroクラスを生成 コードを開く
newで指定するクラス名は変数で指定することも可能。
クラス名を変数で指定 コードを開く
動的にクラスを生成したい時なんかに使えそう。
サンプル:動的にクラスのインスタンスを生成
変数にクラス名を入れて、その変数を使ってインスタンスを生成するサンプルを作ってみる。
サンプルコード コードを開く
結果は以下の通りです。
1Hero
2Enemy
変数を使わずにオブジェクトのメンバにアクセスする
インスタンスを変数に入れないで、一度しか使わないような時に使っています。
例としては良くないですが、Heroクラスを使ってサンプルを作ってみます。
Heroインスタンスを生成してshowNameメソッドを呼んでいます。
変数に入れずにnewする コードを開く
結果は以下の通りです。
1Hero
PHP 5.4.0以降で使えることに注意する。
アクセス権
クラスのメンバへのアクセスの制御を指定する方法です。
種類を表にまとめてみました。
アクセス権の種類 | アクセスの範囲 |
---|---|
private | 定義されたクラスのみ |
protected | 定義されたクラス・そのサブクラス・親クラス |
public | 制限なしでアクセス可能 |
プロパティとメソッドへの使い方はほぼ同じなのですが、以下の違いがあります。
項目 | 説明 |
---|---|
プロパティ | アクセス権の指定が必須 (varを使った場合はpublic) |
メソッド | アクセス権の指定は必須ではない (指定しない場合はpublic) |
継承:extendsキーワード
継承の基本的なルールはこんな感じ。
- 単一継承のみ(多重継承は不可)
- プロパティ・メソッドを継承
- 継承時、プロパティ・メソッドはオーバーライド可能
(final指定を除く)
基本コード
基本コード コードを開く
オーバーライド:プロパティ
基本:ベースクラスのプロパティをオーバーライド
まずはベースクラス(Actor)のプロパティ($name)をサブクラス(Hero)でオーバーライドするサンプルを作ってみます。
コード コードを開く
結果は以下のとおりです。
1Hero
サブクラス側で$nameをオーバーライドしているので、Heroと表示されました。
ちなみに、Heroの$name部分をコメントアウトすれば、オーバーライドされないので結果はこのようになります。
1// Heroクラスのコメントアウトする部分
2// protected $name = 'Hero';
結果は以下のとおりです。
1Actor
静的プロパティにアクセス
静的プロパティはオーバーライドしても、サブクラスからparentキーワードを使って親クラスのプロパティを参照することができる。
サンプルを作ってみます。
HeroのshowNameメソッドにbool値を受け取るようにして、その値により親か子の$nameを表示するようにしてみます。
サンプルコード コードを開く
結果は以下のとおりです。
1Actor
2Hero
通常のプロパティでないことに注意!
おわりに
今回はクラスの基本を復習してみました。
徐々に追記していきます。