PHP
クラス
今回も前回に引き続いてクラスについて記載していきたいと思います。
継承を用いた場合のコンストラクタやデストラクタ その2
前回に引き続き継承を用いた場合のコンストラクタやデストラクタの動作について
記述したいと思います。
基底クラス側のメソッドを経由して静的にアクセスする場合
コンストラクタやデストラクタを呼び出す際に、
以下のように基底クラス側のメソッドを経由して
静的にアクセスすることもできます。
<?php class class01{ public static $var = 10; public static function func01(){ echo self::$var; } } class class02 extends class01{ public static function func02(){ self::func01(); } } $obj = new class02(); $obj->func02(); ?>
結果は以下のようになります。
基底クラス側のメソッドをオーバーライドをしてアクセスする場合
以下のようにクラスを継承してメソッドをオーバーライドをした場合に
self を用いてアクセスするとオーバーライドをした派生クラス側のメソッドが実行されます。
<?php class class01{ public function func01(){ self::func02(); } public static function func02(){ echo "class01_func02()"; } } class class02 extends class01{ public function func01(){ self::func02(); } public static function func02(){ echo "class02_func02()"; } } $obj = new class02(); $obj->func01(); ?>
結果は以下のようにオーバーライドをした派生クラス側のメソッドが実行されています。
メンバ変数も同じように派生クラス側でオーバーライドをした値が表示されます。
<?php class class01{ public static $var = 10; } class class02 extends class01{ public static $var = 20; public function func02(){ echo self::$var; } } $obj = new class02(); echo $obj->func02(); ?>
結果は以下のようにちゃんとオーバーライドをできています。
これらのことから以下のようなことがわかります。
・selfは同じクラス内の静的な変数やメソッドにアクセスする際に使用する。
・selfは継承をして派生クラス側から実行した場合は、基底クラス側の静的な変数やメソッドを実行できる。
・オーバーライドをしたメソッドをselfで呼び出した場合は、派生クラス側の変数やメソッドが実行される。
今回はここまでで次回からもクラスについて記載していきたいと思います。