PHP constによる定数定義とfinalについて
クラス
前回に引き続いて今回もクラスについて記述していきたいと思います。
const
クラス外では define を使用して定数を定義することができますが、
const を使用するとクラス内で定数を定義することができます。
ただし PHP 5.3.0 からはクラス外でも const を使って定数を定義できるようです。
define と const の違いは define の場合はコンパイルの際に単に名前が値に置きかわるだけですが、
const は変数のように型なども含まれているので、さらに値が変わらないことを厳密に定義できます。
constの記述例
1 2 3 4 5 6 7 8 9 10 11 12 13 | <? class test{ const teisuu = 1000; function func(){ return self::teisuu; } } $obj = new test; echo $obj ->func(); ?> |
const は静的にアクセスする必要があるため、
アクセスする際には下記のように $this ではアクセスできません。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <? class test{ const teisuu = 1000; function func(){ return $this ->teisuu; } } $obj = new test; echo $obj ->func(); ?> |
final
final をクラスなどで定義することによって、
そのクラスの派生クラスを作成することを禁止したりすることができます。
またクラス以外にもメソッドのみを継承させないようにしたりすることも可能です。
finalの記述例
以下の例では通常通り継承した先でメソッドにアクセスすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <? class test{ function func(){ echo 10; } } class sub_test extends test{ function func2(){ $this ->func(); } } $obj = new sub_test; $obj ->func2(); ?> |
final を用いると継承を禁止することができます。
以下の例では final を用いて継承を禁止しているので何も表示されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <? final class test{ function func(){ echo 10; } } class sub_test extends test{ function func2(){ $this ->func(); } } $obj = new sub_test; $obj ->func2(); ?> |
今回はここまでにします。