忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/03/19 20:20 |
PHP1-10:クラスの継承

クラスの特徴のひとつが、継承です。
継承とは、あるクラスを引き継いで、新たな別のクラスを作成することができるという機能です。
まあ早速ですが作ってみましょう。

とりあえず乗り物クラスでも作ってみましょう。

class Vehicle{
    //プロパティ
    var $aName;

    //メソッド
    function setName($name){
        $this->aName = $name;
    }
    function getName(){
        return $this->aName;
    }
}


名前だけしか決まってないクラスです。
さて乗り物だけでは範囲が広すぎるので、次は飛行機クラスを作ってみましょう。
この場合、一から飛行機クラスを作るのではなく、さきほど作った乗り物クラスを引き継いで作成することができます。

class Airplane extends Vehicle{
    //プロパティ
    var $aMaker;
    var $aSpeed;

    //コンストラクタ
    function Airplane($maker){
        $this->aMaker = $maker;
    }

    //メソッド
    function getMaker(){
        return $this->aMaker;
    }
    function setSpeed($speed){
        $this->aSpeed = $speed;
    }
    function getSpeed(){
        return $this->aSpeed;
    }
}


extendsで親クラスを引き継ぐことができます。
Airplaneクラスにはどこにも$aNameプロパティ、setNameメソッドおよびgetNameメソッドがありませんが、
親クラスであるVehicleクラスで定義されているため、きちんと使用することができます。

もちろん飛行機クラスをさらに引き継いで、戦闘機クラスを作ることもできます。
乗り物クラスを継承して自動車クラスや船クラスを作ったり、このように元のクラスを利用してどんどん拡張していけるのがクラスの特徴です。


ただ、あんまりやりすぎると、絶対使わないような死にクラスだらけになったり、仕様変更で使えなくなったり、同名なのに動作が違うメソッドが存在したりというJavaみたいな悲惨なことになるので程々にしましょう。


PHPのクラスにはいくつか問題点が存在します。

オーバーロードができません。
引数の有無で振り分ける等の対応をする必要があります。

子クラスにコンストラクタが存在する場合、親クラスのコンストラクタは実行されません。
親クラスのコンストラクタを実行させたい場合、super()的な指定方法が存在しないので明示的に指定せねばならず微妙に不便。

前回も挙げましたが、クラスの外から自由にオブジェクトを操作できてしまうという問題点があります。
その方向を突き詰めたプロトタイプベースという書き方もありますが(JavaScriptが筆頭)、PHP5では逆にJavaやC++のような実装が追加されました。


クラスはデータベースに接続するときのDB種類による差異を吸収したり、ユーザのデータを簡単に取り扱いたい場合などに使用すると便利です。
ただし、継承を繰り返したりしていると、後から見て何をやっているのか絶対にわからなくなりますので、コードよりヘルプが多いくらいの勢いで注釈を書くようにしましょう。

PR


2008/05/19 18:55 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<JavaScript2-3:リアルタイムHTMLエディタ | HOME | PHP1-9:クラス>>
忍者ブログ[PR]