프로그래밍 언어/PHP

PHP: 상수 (매직상수)

상수

상수를 선언하는 방법은 대략 두 가지의 방법이 있습니다. 하나는 조금은 고전적이고, 하나는 요즘 방식이라고 볼 수 있죠.

define

define 을 사용하면 상수를 정의할 수 있는데, 일반적인 스칼라 값이나 배열 또한 가능합니다. 이는 고전적인 방법으로 스코프의 제약을 받지 않으며, 함수의 내부에서 선언하든 밖에서 선언하든 전역적이라고 볼 수 있습니다. 이는 런타임에 정의됩니다.

Defines a named constant at runtime.
define('CONSTANT', 'Hello, world');

function foo()
{
    define('MESSAGE', 'Who are you?');
}

foo();
// -> Hello, world Who are you?
var_dump(CONSTANT, MESSAGE);

const

자바스크립트나 다른 언어들처럼 const 키워드를 사용하여 상수를 선언할 수 있습니다. 함수 내에서는 사용이 불가능합니다. 클래스 내부에서 프로퍼티 형태로 선언이 가능합니다. 이는 컴파일 타임에 정의됩니다.

As opposed to defining constants using define(), constants defined using the const keyword must be declared at the top-level scope because they are defined at compile-time.
const CONSTANT = 'Hello, world';

function foo()
{
    // -> syntax error
    // const MESSAGE = 'Who are you?';
}

// foo();

class MyClass
{
    public const MESSAGE = 'Who are you?';

    public static function foo()
    {
        // -> syntax error
        // const BYE = 'Bye';
    }
}

[ 'user' => $globalConstants ] = get_defined_constants(true);
var_dump($globalConstants, MyClass::MESSAGE);

Magic Constants

매직 상수는 일반적으로 메타적인 정보를 가지고 있습니다. 현재의 코드의 라인이나, 파일, 디렉토리, 함수나 메서드의 이름, 트레이트와 클래스의 이름 등이 있습니다. 이름에 __ 가 붙는 것이 특징입니다. __LINE__, __FILE__, __DIR__ 등이 있고 클래스, 함수, 메서드 등에선 다음과 같이 쓸 수 있습니다.

class A
{
    public function __construct()
    {
        // A
        var_dump(__CLASS__);
    }

    public function sayHello()
    {
        // A::sayHello
        return __METHOD__;
    }
}

var_dump((new A())->sayHello());

더 읽을거리

PHP: 연산자

https://www.inflearn.com/course/php7-reboot

https://www.inflearn.com/course/php7-oop

PHP 카테고리 목차 및 문서 정리

2020년, PHP 언어가 가지는 의미

https://www.php.net/manual/en/