코딩 스쿨 PHP

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

PHP OOP Constants

PHP 상수(Constants): 변하지 않는 데이터 정의


  • *PHP 상수(Constants)**는 프로그램 실행 동안 변하지 않는 값을 정의하는 데 사용됩니다. 상수는 한 번 정의되면 값을 변경할 수 없으며, 프로그램의 어디에서나 접근 가능합니다. 상수는 주로 변경되지 않을 값이나 전역적으로 사용될 값을 저장할 때 사용됩니다.

이 가이드에서는 PHP 상수의 개념, 정의 방법, 상수의 특징실용적인 예제를 다룹니다.


1. PHP 상수의 개념

상수는 변경할 수 없는 값을 저장합니다. 한 번 상수가 정의되면 프로그램 실행 중에는 절대 변경되지 않으며, 주로 전역적으로 사용됩니다.

1.1 상수의 특징

  • 변경 불가: 상수는 한 번 정의되면 값을 변경할 수 없습니다.
  • 자동 전역 변수: 상수는 정의된 이후 어디서나 접근 가능합니다.
  • 값은 주로 숫자, 문자열, 불리언 등 기본 데이터 타입을 가질 수 있습니다.

2. PHP에서 상수 정의

PHP에서 상수를 정의하는 방법은 두 가지가 있습니다:

  1. define() 함수를 사용
  2. 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 키워드를 사용해 클래스 내부에서 상수를 정의할 수 있습니다. 상수는 전역적으로 사용되며, 한 번 정의되면 값이 변경되지 않으므로 안전하게 사용할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com