カテゴリー
PHP

クラスの継承について知ろう

次はクラスの継承について説明します。
「クラスの継承」とは親クラス(元のクラス)の他に「もう1つの関連したクラス」を作ろうとした時に親クラス(元のクラス)のプロパティやメソッドを引き継ぐことを言います。
「もう1つの関連したクラス」のことを子クラスもしくはサブクラスといいます。
親クラスと同じプロパティやメソッドを子クラスで使わなくてはいけない時、同じプロパティやメソッドを子クラスで再度記述する必要はありません。
また、子クラスには子クラス独自のプロパティやメソッドも追加することもできます。
このように「親クラスに使いたいメソッドとプロパティがあって、さらに子クラスに新たなメソッドやプロパティを加えたい」時にクラスの継承を使います。
では例を見てみましょう。
下のファイルはLesson49.phpです。これが親クラスです。1111 Lesson49.phpのプロパティにはprotectedという修飾子が付いていますが、これは同じクラスか継承クラスからのみアクセスが可能と言う意味です。
仮にこの箇所をprivateに変更しますと子クラスでは使うことが出来ません。
ではLesson49.phpの中のBanksystemクラスをLesson50.phpの中のSecuritiesクラスで継承します。Securitiesの意味は証券という意味です。
設定は銀行口座から株式を買い付け、証券を買ったのなら、その代金を銀行口座から引いて、株式を売ったのならばその代金を銀行口座に入れると言うプログラムです。
以下の例はLesson50.phpです。11111 require_onceでLesson49.phpを読み込んでいますが、この記述がないとエラーになります。
では子クラスの作成方法について説明します。1 子クラス名と親クラス名の間にextendsを付けます。
注意してほしいことは全く違うクラス同士を継承してはいけないことです。
例えば銀行クラスと自動車クラスは関連のないクラスなので、継承関係を作っても意味ありません。
継承関係が正しいかどうか悩む場合には「子クラスは親クラスの子供である」という箇所の子クラス、親クラスに自身で作ったクラス名を当てはめてみて、違和感がないようでしたらそれは正しい継承関係です
「銀行クラスは自動車クラスの子供である」と聞いてもおかしいと思いませんか?違和感があるようでしたらそれは間違っています(もちろん、意味があれば問題ありません)。
「親クラスは以前違うプロジェクトで作ったけど、今回のプロジェクトで作るクラスと似ているので、親クラスを継承して、足らない部分だけメソッドやプロパティを新たに加えて子クラスを作ろう」という思想でクラスの継承を作る場合が多いです(継承を使えば初めから開発し直す手間が省けますので)。

次はプロパティ、メソッド、コンストラクタの継承について説明します。
1など Banksystemクラスのメソッドであるのに、Securitiesクラスで使用できていますが、これは親クラスのBanksystemクラスを継承しているからです。
この他の親クラスのプロパティやメソッドも同じように子クラスで使用することが出来ますが、親クラスのプロパティやメソッドでprivateで指定してあるものは使用することが出来ないので気を付けてください。
親クラスのプロパティやメソッドの他にコンストラクタも継承することが出来ます。
これは親クラスのプロパティを初期化したい場合にはコンストラクタを継承すると便利です。
親クラスのコンストラクタを子クラスで使いたい場合には1という記述が必要です。
「parent::」は親クラスを指しています。
以下のように子クラスのコンストラクタの中に親クラスのコンストラクタを書いてください。1次にオーバーライドとは何かについて説明します。
BanksystemクラスとSecuritiesクラスにresultという同じ名前のメソッドがありますが、このように親クラスと子クラスは同じ名前のメソッドを作ることが出来ます。
これをオーバーライドと言いまして、同じ名前のメソッドを作ることによって、親クラスのメソッドより子クラスのメソッドを優先して使うことが出来ます。
子クラスでは親クラスのメソッドと名前が同じでも新たなものを付け加えることができます。
例えばこの例では「株式売却後の」を子クラスのresultメソッドに加えました。1
次は子クラス独自のプロパティやメソッドについて説明します。
子クラスには子クラス独自のプロパティやメソッドを書くことが出来ます。
この例で言いますと$companyプロパティ、stockbuy メソッド、stocksellメソッドです。
では最後に出力までの流れを見てみましょう。1 =>この部分は継承したプロパティに以下のようにデータを代入しています。
1継承したdepositメソッドに10000000を渡します。1 子クラスの独自メソッドに購入金額と購入する株式名を渡します。
この時点で「河野自動車株を1000000円購入しました」が出力されます。1 最後にresultメソッドで出力します。1 結果は「株式売買後の山田銀行の近藤次郎様の残高は9150000」になります。