클래스의 상수
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 16번째.
때로는 절대 변경되지 않아야 하는 값이 class에 필요합니다. class 상수는 모든 인스턴스에서 동일하게 유지되고 선언 후에는 수정할 수 없는 고정된 값을 정의하는 방법을 제공합니다.
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 내부에서는 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는 한 번 정의되면 변경할 수 없습니다. 애플리케이션 전체에서 고정된 상태로 유지되어야 하는 구성 값, 상태 코드 또는 수학 상수와 같은 값에 이상적입니다.
챌린지
쉬움절대 변경되지 않는 고정 변환 값을 class constants에 저장하는 온도 변환 유틸리티를 만들어 보겠습니다.
코드를 정리하기 위해 두 개의 파일을 만듭니다:
Temperature.php: 온도 변환을 처리하는Temperatureclass를 Define합니다. class에는 세 개의 constants가 있어야 합니다:FREEZING_POINT_C는0으로,BOILING_POINT_C는100으로,CONVERSION_FACTOR는1.8로 설정합니다(Celsius에서 Fahrenheit로 변환할 때 사용).public $celsiusproperty와 Celsius 값을 accepts하고 설정하는 constructor를 포함합니다. 저장된 Celsius 온도를 다음 Formula를 사용해 Fahrenheit로 변환하는toFahrenheit()method를 추가합니다:(celsius * CONVERSION_FACTOR) + 32. 또한 온도가 Freezing point constant와 equals하면"Freezing", Boiling point constant와 equals하면"Boiling", otherwise"Normal"을 반환하는getStatus()method를 추가합니다.main.php: Temperature class 파일을 Include합니다. 값이0,100,25인 세 개의 Temperature objects를 Create합니다. 각 온도에 대해 Fahrenheit 변환 결과와 status를 같은 line에 다음 형식으로 print합니다:"[fahrenheit]F - [status]". 각 온도는 own line에 표시되어야 합니다. 세 개를 모두 print한 후, class에서BOILING_POINT_Cconstant에 directly 접근하고(Temperature::BOILING_POINT_C사용) 새 line에 print합니다.
constants는 class inside에서 self::CONSTANT_NAME을 사용하고 outside에서 ClassName::CONSTANT_NAME을 사용하여 Access합니다. properties와 달리 constants에 Access할 때는 $ symbol을 사용하지 않습니다.
직접 해보기
<?php
require_once 'Temperature.php';
// TODO: 값이 0, 100, 25인 Temperature 객체 세 개를 생성하세요
// TODO: 각 온도에 대해 "[fahrenheit]F - [status]" 형식으로 출력하세요
// 각 온도는 자체 줄에
// TODO: 클래스에서 BOILING_POINT_C 상수를 직접 접근하여 출력하세요
// ClassName::CONSTANT_NAME 구문을 사용하세요
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러