PHP constによる定数定義とfinalについて 【初級編 第50回】

この記事は2013年2月12日に書かれたものです。内容が古い可能性がありますのでご注意ください。


PHP constによる定数定義とfinalについて

クラス

前回に引き続いて今回もクラスについて記述していきたいと思います。

const

クラス外では define を使用して定数を定義することができますが、
const を使用するとクラス内で定数を定義することができます。
ただし PHP 5.3.0 からはクラス外でも const を使って定数を定義できるようです。
define と const の違いは define の場合はコンパイルの際に単に名前が値に置きかわるだけですが、
const は変数のように型なども含まれているので、さらに値が変わらないことを厳密に定義できます。

constの記述例

<?

class test{
        const teisuu = 1000;
        function func(){
                return self::teisuu;
        }
}

$obj = new test;
echo $obj->func();

?>

結果は以下のようになります。
ブラウザ確認画像

const は静的にアクセスする必要があるため、
アクセスする際には下記のように $this ではアクセスできません。

<?

class test{
        const teisuu = 1000;
        function func(){
                return $this->teisuu;
        }
}

$obj = new test;
echo $obj->func();

?>

結果は以下のようになります。
ブラウザ確認画像

final

final をクラスなどで定義することによって、
そのクラスの派生クラスを作成することを禁止したりすることができます。
またクラス以外にもメソッドのみを継承させないようにしたりすることも可能です。

finalの記述例

以下の例では通常通り継承した先でメソッドにアクセスすることができます。

<?
 class test{
        function func(){
                echo 10;
        }
 }
 class sub_test extends test{
        function func2(){
                $this->func();
        }
 }

$obj = new sub_test;
$obj->func2();

?>

結果は以下のようになります。
ブラウザ確認画像

final を用いると継承を禁止することができます。
以下の例では final を用いて継承を禁止しているので何も表示されません。

<?
 final class test{
        function func(){
                echo 10;
        }
 }
 class sub_test extends test{
        function func2(){
                $this->func();
        }
 }

$obj = new sub_test;
$obj->func2();

?>

結果は以下のようになります。
ブラウザ確認画像

今回はここまでにします。

  • このエントリーをはてなブックマークに追加

PAGE TOP