Menu
Coddy logo textTech

クラスの定数

CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/91。

場合によっては、決して変更されない値を class 内で使用する必要があります。class の constants は、すべてのインスタンスで同じ値を保ち、宣言後に変更できない固定値を Define する方法を提供します。

constキーワードをクラス内で使用して定数を定義します。慣例として、定数名は大文字で記述します。

<?php
class Circle {
    const PI = 3.14159;
    
    public $radius;
    
    public function __construct($radius) {
        $this->radius = $radius;
    }
    
    public function area() {
        return self::PI * $this->radius * $this->radius;
    }
}

$circle = new Circle(5);
echo $circle->area();

出力:

78.53975

静的プロパティと同様に、constants は個々の objects ではなく class に属します。class の inside では self::CONSTANT_NAME を使用し、外部からは ClassName::CONSTANT_NAME を使用してアクセスします。

<?php
class HttpStatus {
    const OK = 200;
    const NOT_FOUND = 404;
    const SERVER_ERROR = 500;
}

echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;

出力:

200
404

要点: 静的プロパティとは異なり、constants は一度 Define すると変更できません。アプリケーション全体で固定されたままにすべき設定値、ステータスコード、数学定数などの値に最適です。

challenge icon

チャレンジ

簡単

決して変わらない固定の変換値を class constants に保存する、温度変換ユーティリティを作りましょう。

コードを整理するために、2つのファイルを作成します。

  • Temperature.php:温度変換を処理する Temperature class を Define します。class には3つの constants を持たせます。FREEZING_POINT_C0BOILING_POINT_C100CONVERSION_FACTOR1.8(Celsius から Fahrenheit への変換に使用)に設定します。public $celsius property と、Celsius の値を accepts して設定する constructor を含めます。保存された Celsius の温度を Formula (celsius * CONVERSION_FACTOR) + 32 を使用して Fahrenheit に変換する toFahrenheit() method を追加します。また、温度が freezing point constant と equals する場合は "Freezing"、boiling point constant と equals する場合は "Boiling"、otherwise は "Normal" を返す getStatus() method も追加します。
  • main.php:Temperature class のファイルを Include します。010025 の値を持つ3つの Temperature objects を Create します。各温度について、同じ line に Fahrenheit 変換結果、その後に status を次の形式で print します:"[fahrenheit]F - [status]"。各温度はそれぞれ独自の line に表示します。3つすべてを print した後、BOILING_POINT_C constant に class から directly access し(Temperature::BOILING_POINT_C を使用)、新しい line に print します。

constants は class の inside では self::CONSTANT_NAME を使用して access し、outside からは ClassName::CONSTANT_NAME を使用することを Remember してください。properties とは異なり、constants に access するときに $ symbol は使用しません。

自分で試してみよう

<?php

require_once 'Temperature.php';

// TODO: 値が 0、100、25 の Temperature オブジェクトを3つ作成する

// TODO: 各温度について、次の形式で出力する: "[fahrenheit]F - [status]"
// 各温度をそれぞれ1行に

// TODO: クラスから直接 BOILING_POINT_C 定数にアクセスして出力する
// ClassName::CONSTANT_NAME 構文を使用する

?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: PHPオンラインコンパイラ