次のページへオーバーライドとparent継承の基本が理解できたところで応用していきます。親クラスのメソッドを上書きするオーバーライド継承では、親クラスのメソッドを上書きすることができます。いった処理なのかをサンプルで見ていきましょう。親クラスに当たる以下のGoodsクラスを作成してください。phplesson/chap17/Goods.phpコメントにある通り、商品名と価格のプロパティ、それらに値を設定するコンストラクタとそれぞれのゲッタ、さらに、商品名と価格を表示するメソッドから構成されたクラスです。次に、このクラスを継承した子クラスとして、以下のGoodsWithTaxクラスを作成してください。//商品名と価格を表示するメソッド。phplesson/chap17/GoodsWithTax.phpメソッドが1つだけ定義されたクラスです。メソッド内の処理は、親クラスで定義されたゲッタを使って商品価格を取得し、それを1.08倍することで税込み価格を計算しています。その際、round()関数を使って丸め処理も行っています(1)。その税込み価格を表示しています(2)。そのメソッドをよく見ると、親クラスであるGoodsにも同名のprintPrice()メソッドが存在します。これは、親クラスのprintPrice()メソッドを上書きしていることになります。このように親クラスの同名メソッドを子クラスで定義し直すことを「オーバーライド」といいます(図2)。オーバーライドオーバーライドされたメソッドの挙動オーバーライドされたメソッドを呼び出すとどのような挙動になるのでしょうか。リスト4のGoodsクラスとリスト5のGoodsWithTaxクラスを利用するサンプルで見ていくことにしましょう。以下のuseGoods.phpを作成し、実行してください。phplesson/chap17/useGoods.php実行結果は以下の通りです。¥540リスト6では、まず親クラスであるGoodsと子クラスであるGoodsWithTaxをそれぞれnewしています((1)と(3))。その際、プロパティにセットするデータを引数として渡しています。それぞれのprintPrice()メソッドを実行しています。(2)ではGoodsインスタンスのprintPrice()メソッドを実行し、それが実行結果の1行目です。表示された価格が設定した価格そのままなので、GoodsクラスのprintPrice()メソッドが実行されたのが分かります。(4)ではGoodsWithTaxインスタンスのprintPrice()メソッドを実行し、それが実行結果の2行目です。表示された価格が税込み価格なので、GoodsWithTaxクラスのprintPrice()メソッドが実行されたのが分かります。このように、オーバーライドされたメソッドでは、親クラスに記述されたコードは無視されて、子クラスのコードをそのまま実行することになります。コンストラクタの扱いところで、リスト6の(3)に注目してください。ここでは、new時に引数として「日焼け止め」「500」という値を渡しています。いうことは、コンストラクタが実行されていることになりますが、そのコンストラクタがGoodsWithTaxクラスには記述されていません。ここで実行されているコンストラクタは親クラスであるGoodsクラスに記述されているものを使っています。このように、PHPではコンストラクタも通常のメソッドと同様に子クラスから利用できます。オーバーライドも可能です。子クラスで独自のコンストラクタを記述することで、そのコンストラクタが実行されます。サンプルで見ていきましょう。Goodsクラスを継承した以下のGoodsWithTax2クラスを作成してください。ソースコードの内容は、リスト5のGoodsWithTaxクラスとほぼ同じです。違いは、クラス名と新たに追記した(1)の1行だけです。//商品名と価格を表示するメソッド。phplesson/chap17/GoodsWithTax2.phpここでのポイントはリスト7の(1)で登場した「parent::」です。オーバーライドしたメソッド内で、親クラスの同名メソッドを呼び出すには、この記述を使います。構文としてまとめると以下のようになります。オーバーライドした親クラスの呼び出しparent::同名メソッド実際に親クラスのメソッドが実行されるかを確かめてみましょう。このクラスを利用する以下のuseGoods2.phpを作成し、実行してください。phplesson/chap17/useGoods2.php実行結果は以下の通りです。¥216(1)でGoodsWithTax2インスタンスのprintPrice()メソッドを実行しています。実行結果から、明らかに親クラスの同名メソッドも実行されていることが読み取れます。親コンストラクタの呼び出しこの「parent::」は親コンストラクタの呼び出しにも使います。子クラスでコンストラクタをオーバーライドし、その子クラスのコンストラクタ内で親クラスのコンストラクタを呼び出したい場合は、以下のように記述します。:}注意!!「final」オーバーライドの話が出てきたところで、1つ補足しておきます。メソッドによっては、子クラスでオーバーライドされたくない場合というのもあり得ます。その場合は、以下のようにメソッド定義に「final」を付けます。{......}同様に、継承不可のクラス、つまり子クラスが作成できないクラスを定義したい場合は、以下のように「final」をクラス宣言に付けます。{......}継承で威力を発揮するアクセス修飾子protected関連記事WordPress活用に欠かせない、PHPをWindowsにダウンロードしてインストール、アンインストールする本連載では、さまざまなソフトウェアのインストール、実行するためのセットアップ設定、実行確認、アンインストールの手順を解説する。今回は、PHPとは何か、PHPで動くツールの紹介、PHPのインストールとアンインストールについて解説。PHPプログラミングを始める参考にしてほしい。PHPにおけるクラスの書き方と呼び出し方——インスタンス、メソッド、プロパティ「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説する連載。初回は、「クラス」の書き方と簡単な使い方、メソッド/クラス定義内関数、プロパティ/クラス定義内変数、マルチプルインスタンスについて紹介します。PHP(スクリプト言語)PHPは、HTMLへの埋め込みが可能なスクリプト言語(およびその処理系)。主としてWebアプリ開発に使用される。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。