<< RSS情報をsimplexml_load_fileで読み込んでみる | main | CSVファイルの読み込みを試してみた >>

PHPのクラスの継承を試してみた

2013.06.09 Sunday | by こも
C++歴が割と長いので、ソースのべた書きは割と苦手だったりします(^^;;

PHPでもクラスが使えるらしいので、試してみました。


class サブクラス名 extends 基底クラス名

という文法で継承できるみたいですね。


とりあえず、基底クラスのメソッドとメンバ変数をオーバーライドができるか、サンプルプログラムを書いてみました。


// 基底クラス
class BaseUsrClass {
	protected $val = 10;
	function getName() {
		return "基底クラス";
	}

	function dispName() {
		echo $this->getName();
	}

	function dispVal() {
		echo $this->val;
	}
}

// 基底クラスを継承したサブクラス
class SubUsrClass extends BaseUsrClass {
	// メンバ変数をオーバーライド
	protected $val = 20;
	// メソッドをオーバーライド
	function getName() {
		return "サブクラス";
	}
}


// メソッドのオーバーライドのテスト
$obj = new SubUsrClass();
echo "Name : ";
$obj->dispName();
echo "
"; // メンバ変数のオーバーライドのテスト echo "Val : "; $obj->dispVal(); echo "
";



[実行結果]

Name : サブクラス
Val : 20


予想通りの実行結果で、PHPでもクラスが活用できそうだなぁと思いました。


ただ一点、サブクラスでオーバーライドしたメンバ変数の宣言(20行目)をprivateにしたら、次のようなエラーが出ちゃいました。

Fatal error: Access level to SubUsrClass::$val must be protected (as in class BaseUsrClass) or weaker in http://www.xxx.net/test.php on line 25


いろいろググってみましたが、protected か public にしないとダメらしいですね(^^;;

ちょっと不思議でした。

Comment
Add Comment









Sponsored Link
Recommend
PHP 逆引きレシピ (PROGRAMMER'S RECiPE)
PHP 逆引きレシピ (PROGRAMMER'S RECiPE) (JUGEMレビュー »)
鈴木 憲治,安藤 建一,山田 直明,八木 照朗,山本 義之,河合 勝彦
Recommend
Recommend
Powered
無料ブログ作成サービス JUGEM