program tip

PHP에서 개인 상수가 가능합니까?

radiobox 2020. 12. 3. 07:42
반응형

PHP에서 개인 상수가 가능합니까?


이 질문에 이미 답변이 있습니다.

PHP는 허용하지 않습니다

class Foo
{
    private const my_private_const;

하지만 물론 허용

const my_const;

전역 효과 상수에 그래서 나는 액세스 할 수 있기 때문에 my_const사용 어디서나Foo::my_const

개인 상수를 만드는 방법이 있습니까?


대답은 단순한 "아니오"입니다. PHP는이 개념을 지원하지 않습니다. 당신이 할 수있는 최선 private static은 클래스 변수인데, 이것은 읽기 전용이 아니기 때문에 당연히 좋지 않습니다. 하지만 그저 해결해야합니다.

편집하다

귀하의 질문은 저를 생각하게 만들었습니다. 여기 제가 시도한 적이 없지만 작동 할 수있는 것이 있습니다. 다른 말로 "이것은 테스트되지 않았습니다". 그러나 다음과 같은 "개인 상수"를 원한다고 가정하십시오 FOO.

// "Constant" definitions
private function __get($constName){
    // Null for non-defined "constants"
    $val = null;

    switch($constName){
        case 'FOO':
            $val = 'MY CONSTANT UNCHANGEABLE VALUE';
            break;
        case 'BAR':
            $val = 'MY OTHER CONSTANT VALUE';
            break;
    }

    return $val;
}

물론 구문은 약간 이상하게 보일 것입니다.

// Retrieve the "constant"
$foo = $this->FOO;

...하지만 적어도 이것은 작동하지 않을 것입니다.

$this->FOO = 'illegal!';

시도해 볼 가치가있는 것일까 요?

건배


여러분! PHP 7.1.0이 출시되었습니다.

이제 클래스 상수로 가시성 수정자를 가질 수 있습니다.

<?php
class Foo {
    // As of PHP 7.1.0
    public const BAR = 'bar';
    private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>

PHP 7.1에서 위 예제의 출력 :

bar

Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …

클래스 상수에 대한 가시성 수정자가 PHP 7.1에 추가되었습니다.

RFC : 지원 클래스 상수 가시성


@Madbreaks의 해결 방법의 단순화 된 버전 : 개인 "상수"값을 반환하는 개인 정적 함수를 작성합니다.

private static function MY_CONSTANT() {
    return "constant string";
}

용법:

public static function DoStuff() {
    echo self::MY_CONSTANT();
}

참고 URL : https://stackoverflow.com/questions/10232434/are-private-constants-possible-in-php

반응형