PHP OOP Constants
PHP 상수(Constants): 변하지 않는 데이터 정의
- *PHP 상수(Constants)**는 프로그램 실행 동안 변하지 않는 값을 정의하는 데 사용됩니다. 상수는 한 번 정의되면 값을 변경할 수 없으며, 프로그램의 어디에서나 접근 가능합니다. 상수는 주로 변경되지 않을 값이나 전역적으로 사용될 값을 저장할 때 사용됩니다.
이 가이드에서는 PHP 상수의 개념, 정의 방법, 상수의 특징 및 실용적인 예제를 다룹니다.
1. PHP 상수의 개념
상수는 변경할 수 없는 값을 저장합니다. 한 번 상수가 정의되면 프로그램 실행 중에는 절대 변경되지 않으며, 주로 전역적으로 사용됩니다.
1.1 상수의 특징
- 변경 불가: 상수는 한 번 정의되면 값을 변경할 수 없습니다.
- 자동 전역 변수: 상수는 정의된 이후 어디서나 접근 가능합니다.
- 값은 주로 숫자, 문자열, 불리언 등 기본 데이터 타입을 가질 수 있습니다.
2. PHP에서 상수 정의
PHP에서 상수를 정의하는 방법은 두 가지가 있습니다:
define()
함수를 사용const
키워드를 사용 (클래스 내부에서 주로 사용)
2.1 define()
함수
define()
함수는 상수를 정의하는 데 사용되며, 주로 글로벌 상수를 정의할 때 사용됩니다.
<?php
define("SITE_NAME", "My Awesome Website");
define("MAX_USERS", 1000);
echo SITE_NAME; // 결과: My Awesome Website
echo MAX_USERS; // 결과: 1000
?>
설명:
define("상수 이름", "상수 값")
: 상수 이름은 대문자로 정의하는 것이 일반적이며, 상수 값은 문자열, 숫자 등 다양한 데이터 타입을 사용할 수 있습니다.
2.2 const
키워드
const
키워드는 클래스 내부에서 상수를 정의할 때 주로 사용됩니다. 이는 정적 상수로, 클래스의 인스턴스와 상관없이
사용됩니다.
<?php
class Website {
const SITE_NAME = "My Awesome Website";
const MAX_USERS = 1000;
public function getSiteName() {
return self::SITE_NAME; // 클래스 내부에서 상수 접근
}
}
echo Website::SITE_NAME; // 결과: My Awesome Website
echo Website::MAX_USERS; // 결과: 1000
$website = new Website();
echo $website->getSiteName(); // 결과: My Awesome Website
?>
설명:
const
키워드는 클래스 내부에서 상수를 정의할 때 사용되며, 클래스 내외부에서클래스명::상수명
형식으로 접근할 수 있습니다.self::상수명
: 클래스 내부에서 상수에 접근할 때 사용됩니다.
3. 상수의 주요 특징
-
대소문자 구분: 상수 이름은 기본적으로 대소문자를 구분합니다. 하지만,
define()
함수에서 세 번째 매개변수로true
를 전달하면 대소문자를 구분하지 않도록 설정할 수 있습니다.<?php define("GREETING", "Hello World"); echo GREETING; // 결과: Hello World // echo greeting; // 오류 발생: 상수는 기본적으로 대소문자를 구분 ?>
-
변경 불가: 상수는 한 번 정의되면 재정의하거나 값을 변경할 수 없습니다. 이는 상수의 값을 실수로 변경하는 것을 방지합니다.
<?php define("PI", 3.14159); // define("PI", 3.14); // 오류 발생: 상수를 다시 정의할 수 없음 ?>
-
전역 사용: 상수는 어디서나 전역적으로 접근할 수 있습니다. 함수 내부에서도 별도의 선언 없이 사용할 수 있습니다.
<?php define("WELCOME_MESSAGE", "Welcome to our website!"); function showWelcome() { echo WELCOME_MESSAGE; // 함수 내부에서 전역 상수 접근 } showWelcome(); // 결과: Welcome to our website! ?>
4. PHP 미리 정의된 상수
PHP는 기본적으로 여러 미리 정의된 상수를 제공합니다. 이 상수들은 PHP의 버전 정보, 경로 정보, 오류 처리 등과 관련된 정보를 포함하고 있습니다.
4.1 주요 미리 정의된 상수
-
PHP_VERSION
: 현재 PHP 버전.<?php echo PHP_VERSION; // 결과: 예: 8.1.2 ?>
-
PHP_INT_MAX
: PHP에서 표현할 수 있는 가장 큰 정수.<?php echo PHP_INT_MAX; // 결과: 9223372036854775807 (64비트 시스템 기준) ?>
-
__LINE__
: 현재 코드의 줄 번호.<?php echo "This is line number " . __LINE__; // 결과: This is line number 3 ?>
-
__FILE__
: 현재 파일의 전체 경로와 파일명.<?php echo "The file is located at: " . __FILE__; // 결과: 파일의 경로 출력 ?>
-
__DIR__
: 현재 파일의 디렉토리 경로.<?php echo "The directory is: " . __DIR__; // 결과: 파일의 디렉토리 출력 ?>
5. 클래스 상수와 정적(static) 속성 비교
클래스 상수(const
)와 **정적 속성(static)**은 모두 클래스의 인스턴스와 관계없이 사용할 수 있지만, 두 개념은 차이점이 있습니다.
5.1 클래스 상수와 정적 속성 차이점
- *상수(
const
)**는 변경할 수 없으며, 값이 고정된 데이터입니다. 인스턴스나 클래스의 상태에 따라 변하지 않습니다. - *정적 속성(
static
)**은 클래스와 공유되며, 클래스나 다른 메서드에 의해 변경될 수 있습니다.
5.2 예제 비교
<?php
class Example {
const CONSTANT_VALUE = "This is a constant"; // 상수
public static $staticValue = "This is static"; // 정적 속성
public function changeStaticValue($newValue) {
self::$staticValue = $newValue;
}
}
echo Example::CONSTANT_VALUE; // 결과: This is a constant
echo Example::$staticValue; // 결과: This is static
Example::changeStaticValue("New static value");
echo Example::$staticValue; // 결과: New static value
?>
설명:
- 클래스 상수는 변경할 수 없고, 한 번 설정되면 영구히 유지됩니다.
- 정적 속성은 다른 메서드에 의해 변경될 수 있습니다.
6. 실용 예제: 환경 설정 상수
상수는 주로 전역 설정이나 변하지 않는 값을 정의할 때 사용됩니다. 예를 들어, 데이터베이스 연결 정보나 애플리케이션의 기본 설정을 상수로 정의할 수 있습니다.
6.1 환경 설정 상수 예제
<?php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "password");
define("DB_NAME", "my_database");
function connectToDatabase() {
$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$connection) {
die("Database connection failed: " . mysqli_connect_error());
}
return $connection;
}
$connection = connectToDatabase();
echo "Connected to the database successfully!";
?>
설명:
- 데이터베이스 연결 정보를 상수로 정의하여, 필요할 때마다 쉽게 접근할 수 있습니다.
- 상수를 사용함으로써 코드의 재사용성을 높이고 가독성을 향상시킵니다.
7. 상수 사용 시 주의사항
- 상수는 한 번만 정의할 수 있습니다. 동일한 이름으로 상수를 다시 정의하려고 하면 오류가 발생합니다.
- 상수의 이름은 일반적으로 대문자로 작성하여 변수를 시각적으로 구분합니다.
- 상수는 배열이나 객체 값을 저장할 수 없습니다. 배열이나 객체를 저장하려면 정적 속성을 사용하는 것이 좋습니다.
요약
PHP 상수는
변경되지 않는 값을 저장하고 전역적으로 접근할 수 있도록 하여, 중요한 설정이나 변하지 않을 값을 저장할 때
유용합니다. define()
함수를 사용해 전역 상수를 정의하거나, const
키워드를 사용해 클래스
내부에서 상수를 정의할 수 있습니다. 상수는 전역적으로 사용되며, 한 번 정의되면 값이 변경되지 않으므로 안전하게 사용할 수 있습니다.