クラスの定数
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 すると変更できません。アプリケーション全体で固定されたままにすべき設定値、ステータスコード、数学定数などの値に最適です。
チャレンジ
簡単決して変わらない固定の変換値を class constants に保存する、温度変換ユーティリティを作りましょう。
コードを整理するために、2つのファイルを作成します。
Temperature.php:温度変換を処理するTemperatureclass を Define します。class には3つの constants を持たせます。FREEZING_POINT_Cは0、BOILING_POINT_Cは100、CONVERSION_FACTORは1.8(Celsius から Fahrenheit への変換に使用)に設定します。public $celsiusproperty と、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 します。0、100、25の値を持つ3つの Temperature objects を Create します。各温度について、同じ line に Fahrenheit 変換結果、その後に status を次の形式で print します:"[fahrenheit]F - [status]"。各温度はそれぞれ独自の line に表示します。3つすべてを print した後、BOILING_POINT_Cconstant に 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 構文を使用する
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ