PHP
クラス
今回も前回に引き続いてクラスについて記載していきたいと思います。
継承を用いた場合のコンストラクタやデストラクタ
以前、コンストラクタやデストラクタについて記述しましたが、
今回は継承をした場合にコンストラクタやデストラクタがどのような動きをするのかについて
記述したいと思います。
コンストラクタの場合
<?php class class01 { public function __construct(){ echo "class01内の処理"; } } class class02 extends class01 { } $obj = new class02; ?>
この場合の結果は以下のようになり、基底クラス側のコンストラクタをちゃんと呼び出します。
以下のようにすればメンバメソッドも呼び出すことができます。
メソッドの場合は static の記述をつけなくても、
静的な静的アクセスとインスタンスメソッドへのアクセス両方対応しているようです。
<?php class class01{ public static $var = 10; //static の記述を抜くとエラーになる public function func01(){ echo self::func02(); } public function func02(){ //static の記述を抜いてもエラーにならなかった echo self::$var; } } $obj = new class01(); $obj->func01(); ?>
以下のようにクラス外から selfを使用して静的なアクセスをすることはできません。
下記の場合はエラーになります。
<?php error_reporting(E_ALL ^ E_NOTICE); //デバッグを表示するため ini_set('display_errors', '1'); //デバッグを表示するため class class01{ public static $var = 10; public static function func01(){ echo self::func02(); } public static function func02(){ echo self::$var; } } self::func01(); ?>
クラスを継承した派生クラス側から基底クラスの静的メンバ変数を呼び出すこともできます。
この場合はエラーなく表示することができます。
<?php class class01{ public static $var = 10; } class class02 extends class01{ public static function func02(){ echo self::$var; } } $obj = new class02(); $obj->func02(); ?>
今回はここまでにします。