PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPクラス定数の基本と使い方を徹底解説


はじめに

PHPでは、クラス内に一度定義したら変更されない固定値(定数)を持つ識別子を定義できます。これを「クラス定数」と呼びます。クラス定数は、そのクラスにおいて常に同じ値を保つものです。

変数やプロパティと区別するため、定数名には$記号が付かず、constキーワードを使って定義します。

クラス定数のデフォルトの可視性はpublicですが、定義時に他の修飾子(public・protected・private)を指定することも可能です。また、定数に設定できるのは定数式のみで、変数・関数呼び出し・プロパティなどを直接代入することはできません。

クラス定数へは、スコープ定義演算子(::)を使ってクラス名経由でアクセスします。クラス内部のメソッドから参照する場合は、selfキーワードを使用します。

構文

class SomeClass{
    const CONSTANT = 'constant value';
}
echo SomeClass::CONSTANT;

定数名は大文字・小文字が区別されます。慣例として、定数名はすべて大文字で記述するのが一般的です。

クラス定数の基本的な使用例

次の例は、クラス定数を定義し、クラス内外からアクセスする方法を示しています。

<?php
class square{
    const PI=M_PI;
    var $side=5;
    function area(){
        $area=$this->side**2*self::PI;
        return $area;
    }
}
$s1=new square();
echo "PI=". square::PI . "\n";
echo "area=" . $s1->area();
?>

この例では、組み込み定数M_PIをクラス定数PIとして定義しています。メソッド内ではself::PIで参照し、クラス外ではsquare::PIのようにクラス名を使ってアクセスしています。

出力結果

このコードを実行すると、次のような結果になります。

PI=3.1415926535898
area=78.539816339745

式としてのクラス定数

クラス定数には、定数式を代入することもできます。次の例では、あらかじめ定義した2つのグローバル定数を使った除算の結果を、クラス定数として設定しています。

<?php
const X = 22;
const Y=7;
class square {
    const PI=X/Y;
    var $side=5;
    function area(){
        $area=$this->side**2*self::PI;
        return $area;
    }
}
$s1=new square();
echo "PI=". square::PI . "\n";
echo "area=" . $s1->area();
?>

出力結果

このコードを実行すると、次のような結果になります。

PI=3.1428571428571
area=78.571428571429

クラス定数と可視性修飾子

PHP 7.1以降では、クラス定数にもpublic・protected・privateといった可視性修飾子を指定できます。private定数はクラスの外部からアクセスできず、アクセスしようとすると致命的エラー(Fatal Error)が発生します。

<?php
class example {
    const X=10;
    private const Y=20;
}
$s1=new example();
echo "public=". example::X. "\n";
echo "private=" . $s1->Y ."\n";
echo "private=" . $example::Y ."\n";
?>

出力結果

このコードを実行すると、public定数Xには正常にアクセスできる一方、private定数Yへの不正なアクセスに対して、次のような警告およびエラーが出力されます。

public=10
PHP Notice: Undefined property: example::$Y in line 11
private=PHP Fatal error: Uncaught Error: Cannot access private const example::Y

まとめ

  • クラス定数はconstキーワードで定義し、名前に$記号は付けない
  • デフォルトの可視性はpublicだが、PHP 7.1以降はprivate・protectedも指定可能
  • 代入できるのは定数式のみで、変数や関数呼び出しは不可
  • クラス外からは「クラス名::定数名」、クラス内からは「self::定数名」でアクセスする
  • 命名は大文字・小文字が区別され、慣例的にすべて大文字で書く
  1. PHPのFILTER_SANITIZE_NUMBER_INT定数とは?使い方とサンプルコードを解説

    PHPのFILTER_SANITIZE_NUMBER_INT定数は、文字列から数字以外の不正な文字をすべて取り除き、整数として有効な形式にサニタイズ(無害化)するためのフィルター定数です。このフィルターを適用すると、半角数字とプラス記号「+」、マイナス記号「-」以外のすべての文字が削除されます。ユーザー入力などから数値部分だけを安全に抽出したい場合に便利です。使い方FILTER_SANITIZE_NUMBER_INTは、filter_var()関数と組み合わせて使用します。第1引数に対象の変数を、第2引数にこの定数を指定します。戻り値フィルタリングが成功した場合は、不正な文字が除去された文字列

  2. PHPのFILTER_VALIDATE_FLOAT定数の使い方を解説

    FILTER_VALIDATE_FLOATは、PHPのfilter拡張モジュールで提供される定数の一つで、指定した値が有効な浮動小数点数(float)であるかどうかを検証するために使用します。主にfilter_var()関数と組み合わせて使われます。 基本的な使い方 filter_var()関数の第2引数にFILTER_VALIDATE_FLOATを渡すことで、値が浮動小数点数として妥当かどうかをチェックできます。検証が成功した場合はfloat型の値が返され、失敗した場合はfalseが返されます。 戻り値 検証に成功した場合:float型の値検証に失敗した場合:false 使用例 <?p