初心者向け。PHPのクラスについて書き方のアウトプットの記事
1554 回閲覧されました
みなさんこんにちは、jonioです。
今回はProgateのPHPコースにあるクラスと継承についてのアウトプットの記事ですぐに内容を忘れる自分への備忘録です。
それではアウトプットの開始です。
目次
クラス・プロパティ・メソッド
ロボットの例で説明します。
クラスはロボットを作るための設計図です。
設計図があるとロボットを作ることができますが設計図を基に作ったロボットをインスタンスと言います。
作ったロボットですが男性型・女性型などの性質と掃除するなど何ができるかが分かりません。
性質のことをプロパティ(またはメンバ変数と言います)・何ができるかをメソッドと言います。
図にすると↓です。
クラスの書き方
クラスの書き方は↓です。
「class クラス名{}」でクラスを作成することができます。
クラス名を「Robott」にしていますが一番最初の文字を大文字にします。
インスタンスの書き方
クラスを作ったら次はインスタンスでコードを↓にしますがクラスの外に書きます。
「new クラス名」でインスタンスを作成することができます。
インスタンスを作ったら次はプロパティかメソッドでプロパティを作って説明します。
プロパティの書き方
プロパティの書き方は↓で「private $プロパティ名」としクラスの中に書きます。
プロパティ名の前にある「private」ですがProgateで見た限りは「public」・「private」・「protected」の3つがあります。
役割は↓になります。
- public : クラスの外から変更できる
- private : クラスの外から変更できなく(子クラス内部でも変更できない)カプセル化と言います
- protected : クラスの外から変更できないけど子クラス内部で変更できる
子クラスの説明は後でします。
プロパティは一般的に「private」にするみたいですが今はプロパティの内容を表示するためにあえて「public」で説明します。
プロパティの内容をパソコンに表示するためにコードを↓にします。
これで「男性型ロボット」と表示されます。
9行目でgenderプロパティに「男性型ロボット」を代入していますがプロパティを呼び出す時は「$インスタンス名 -> $を取ったプロパティ名」とします。
次はメソッドの書き方です。
メソッドの書き方
メソッドの書き方は↓でクラスの中に書きます。
4行目〜7行目ですがfunctionの前に「public」を付けます。
メソッドを呼び出しているのが13行目で「$インスタンス名 -> メソッド名」で呼び出します。
次は「$this」です。
$thisの使い方
メソッドやプロパティを呼び出す時にインスタンスが必要になりますがメソッドの中でプロパティや他のメソッドを呼び出す時はインスタンスの名称が「$this」になります。
↓のコードにすると「私は男性型ロボットです」と表示されます。
次はコンストラクタです。
コンストラクタ
コンストラクタはインスタンスを生成したのと同時に呼び出されるメソッドです。
書き方は↓になります。
これで「私は男性型ロボットです」と表示されます。
書き方は「public function __construct( ){ }」です。
コンストラクタには引数を使うことができます。
例えば↓のコードにします。
これで「私は男性型ロボットです」と表示されますが12行目の「男性型ロボット」が4行目の「$gender」に代入されて6行目で使用されます。
次はプロパティのカプセル化です。
プロパティのカプセル化
プロパティを「private」にした場合になります。
具体的にコードで↓にした場合です。
プロパティをprivateにした場合クラスの外からプロパティを呼び出すことができず呼び出す場合はゲッターという関数を使います。
具体的にコードにすると↓です。
13行目〜17行目がゲッターを使っていますが書き方は「public function get名称(){}」とします。
ゲッターを定義して他の所(25行目)で呼び出しています。
次はクラスメソッドです。
クラスメソッド
↓のジュース・コーヒー・パスタ・カレーを表示する状況を考えます。
この時のコードはこうなります。
クラスを管理するファイル(menu.php)
インスタンスを管理するファイル(data.php)
data.phpを見ればわかりますがジュース・コーヒー・パスタ・カレーを表示する時にそれぞれのインスタンスを作って表示しています。
ですが↓の赤枠は商品の数を表示するのでクラス全体で考えないといけません。
クラス全体で考える場合はクラスプロパティを使いmenu.phpのコードを↓にします。
普通のプロパティの書き方は「public $〜;」でしたがクラスプロパティは「public static $〜」と書きます。
そしてクラスプロパティを表示する時は↓の様に「クラス名::クラスプロパティ名」とします。
クラスプロパティですが場合によってはメソッドで使うなどクラスの中で使う場合がありますがそういう場合はコードを↓にします。
7行目でクラスプロパティを使っていますが「self::$クラスプロパティ名」として使います。
「self」ですがメソッドの中でプロパティを使う場合の「$this」に感じが似ていると思います。
次はクラスの継承です。
クラスの継承
↓の例で解説します。
クラスとインスタンスはこうなります。
クラスを管理するファイル(menu.php)
インスタンスを管理するファイル(data.php)
1つのクラスで4つのインスタンスを管理していますが食べ物と飲み物は食べると飲むで別の系統なので系統別に分けて管理したほうが扱いやすいです。
こんな場合はクラスの継承を使ってクラスを分けます。
大元のクラス(今だとmenuクラス)を親クラスと言い継承したクラスを子クラスと言います。
継承の書き方は「class 子クラス名 extends 親クラス名{ }」です。
継承を使うと親クラスのプロパティやメソッドを使うことができます。
プロパティを使う際の注意点として「public 」や「private」では子クラスから親クラスのプロパティにアクセスすることができなく「protected」にしないといけません。
コードを使った例が↓です。
これで↓と表示されます。
子クラスで独自のプロパティやメソッドを定義することもできます。
次は子クラスでコンストラクタを使う場合です。
子クラスで親クラスのコンストラクタを使う場合
子クラスで親クラスのコンストラクタを使う場合は↓にしないといけません。(子クラスに子クラス独自のtimeプロパティを使ったとします)
一旦親クラスと子クラスのプロパティを合わせたコンストラクタ(22行目)を書いて23行目の引数に親クラスのプロパティを書きます。
次はinstanceofです
instanceof
↓のコードで考えますが特定のクラスのインスタンスの内容を表示したい場合を考えFoodクラスのインスタンスを表示させます。
39行目で使っていますが 書き方は「インスタンス名 instanceof クラス名」です。
これでアウトプットの終わりです。