Web言語のお勉強~ど素人が往く~

かつてVB6を1年くらい触った事があるだけのど素人がWeb言語に挑戦します。勉強結果を随時発表します。

PHPのお勉強「クラスの継承」


どんどん行ってみよう!

今朝PHPでクラスを初めて使ってみたばかりですが、ドンドン行きます!
今夜はPHPのクラスの継承をやってみます。

参考にさせてもらったのはPHPマニュアルの「クラスの基礎 extends」の章。
http://www.php.net/manual/ja/language.oop5.basic.php

一部クラスの継承についての解説部分を引用させて頂きます。

クラスの基礎 extends


クラスは、宣言部に extends キーワードを含めることで、他のクラスのメソッドと プロパティを継承することができます。多重継承を行うことはできず、クラスが継承できるベース クラスは一つだけです。


継承されたメソッドやプロパティをオーバーライドするには、 親クラスで定義されているのと同じ名前でそれを再宣言します。 しかし、親クラスでそのメソッドが final 定義されている場合はオーバーライドできません。 オーバーライドされた元のメソッドや静的プロパティにアクセスするには、 parent:: で参照します。


メソッドをオーバーライドするときには、パラメータのシグネチャも同じでなければなりません。 もし違っていれば、PHP は E_STRICT レベルのエラーとなります。ただしコンストラクタは例外で、 異なるパラメータでオーバーライドすることができます。

なるほど。
PHPではクラスの多重継承は出来ないんですね。

親クラスの関数をオーバーライドする事もできるみいたいです。
オーバーライドもとの関数や静的プロパティにもアクセスできるようです。

コンストラクタについては、また次回勉強したいと思います(^^;

実装してみました

今朝作ったクラスを一部手直しして使います。
さっと作って10分で完了!

作ってみた継承クラスはこちら
↓ ↓ ↓ ↓ 
http://moneyreport.link/service/class02.php

動作画面はこちら。
f:id:MoneyReport:20140308223905p:plain

ソースがこちら。

<?php
class TestClass
{
    // プロパティ
    public $var = 'こちらは親クラスの関数';

    // 関数宣言
    public function DisplayThisVar()
    {
        echo $this->var;
    }
}

class ExtendClass extends TestClass
{
    // 親クラスのメソッドをオーバーライド
    function DisplayThisVar()
    {
        echo "初めての継承クラス<br />";
        
        // 親クラスの元のメソッドを呼び出し
        parent::DisplayThisVar();
    }
}

// クラスのインスタンス作成
$extendClass = new ExtendClass();
    
// 継承クラスの関数呼び出し
$extendClass->DisplayThisVar();
?>

「->」の使い方については、今朝の記事にhiraku (id:escape_artist)さんからコメントで教えて頂きました。

非常にわかりやすく、勉強になりました。
どうもありがとうございます!

JAVAとかで言う「class.MethodName();」の「.」に該当するそうです。
そうとわかれば、もう簡単♪

と思いきや、継承クラス内で親クラスのメソッドやプロパティにアクセスする時には「->」ではなくて「::」を使うそうです。
「::」って使った事ないです(^^;
これも慣れが必要ですね。

頑張ろうっと。

初めてのPHP、MySQL、JavaScript&CSS 第2版

初めてのPHP、MySQL、JavaScript&CSS 第2版