PHP
クラス
今回も前回に引き続いてクラスについて記載していきたいと思います。
遅延静的束縛について
今回も前回同様、遅延静的束縛の呼び出し方や注意点などについて記述していきたいと思います。
オブジェクトを使った場合でも使用可能
遅延静的束縛はオブジェクトを使用した場合でも使用することが可能です。
以下のようにするとオブジェクトから遅延静的束縛によって、
各クラス内のメソッドを実行することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php class class01{ public static function func01(){ static::func02(); } public static function func02(){ echo "class01内のfunc02の処理" ; } } class class02 extends class01{ public static function func02(){ echo "class02内のfunc02の処理" ; } } class class03 extends class02{ public static function func02(){ echo "class03内のfunc02の処理" ; } } $obj01 = new class01(); $obj01->func01(); $obj02 = new class02(); $obj02->func01(); $obj03 = new class03(); $obj03->func01(); ?> |
結果は以下のようになり、それぞれのクラス内の func02 が呼び出されています。
クラス内で別のクラスを呼び出した場合の遅延静的束縛の動作
遅延静的束縛は static::
を最後に呼び出しているクラス名を保持するものなので、
以下のようにして呼び出した場合は、class01
を呼び出した直後に、 static::func02();
を
呼び出しても、static::
自体を呼び出しているのは class03
なので、
class03
内の func02が呼び出されるということになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <!--?php <br ?--> class class01{ public static function func01(){ static::func02(); } public static function func02(){ echo "class01内のfunc02の処理 "; } } class class02 { public static function func01(){ static::func02(); } public static function func02(){ echo "class02内のfunc02の処理 "; } } class class03 { public static function func01(){ static::func02(); //class03 内のfunc02の処理が実行される class01::func01(); //class01 内のfunc02の処理が実行される static::func02(); //class03 内のfunc02の処理が実行される class02::func01(); //class02 内のfunc02の処理が実行される static::func02(); //class03 内のfunc02の処理が実行される } public static function func02(){ echo "class03内のfunc02の処理 "; } } class03::func01(); ?> |
結果は次のようになり、static自体を呼び出している class03 内の処理が実行されています。
今回はここまでにします。