programing

당신은 PHP의 클래스 내에서 정적 상수를 사용할 수 있습니까?

javajsp 2023. 8. 12. 09:50

당신은 PHP의 클래스 내에서 정적 상수를 사용할 수 있습니까?

저는 다음이 효과가 있을 것으로 예상했지만, 작동하지 않는 것 같습니다.

<?php

class Patterns
{
    public static const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
    public static const INT = "/^\d+$/";
    public static const USERNAME = "/^\w+$/";
}

이 오류가 발생하기 때문입니다.

syntax error, unexpected T_CONST, expecting T_VARIABLE

다음과 같이 클래스에서 const를 사용할 수 있습니다.

class Patterns {
    const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
    const INT = "/^\d+$/";
    const USERNAME = "/^\w+$/";
}

액세스할 수 있습니다.USERNAME다음과 같은 제약 조건:

Patterns::USERNAME

PHP에서 static과 const는 두 가지 다른 것입니다.

const는 클래스 상수를 나타냅니다.이들 변수는 앞에 '$'가 없기 때문에 일반 변수와 다르며, 앞에 가시성 수식어(공개, 보호, 비공개)를 둘 수 없습니다.구문:

class Test
{
    const INT = "/^\d+$/";
}

그들은 항상 존재하기 때문에 불변입니다.

정적은 동일한 클래스의 개체 간에 공유되는 데이터를 나타냅니다.데이터는 수정할 수 있습니다.한 번에 실행 중인 인스턴스 수를 추적하는 클래스를 예로 들 수 있습니다.

class HowMany
{
    private static $count = 0;

    public function __construct()
    {
        self::$count++;
    }

    public function getCount()
    {
        return self::$count;
    }

    public function __destruct()
    {
        self::$count--;
    }
}

$obj1 = new HowMany();
$obj2 = new HowMany();

echo $obj1->getCount();

unset($obj2);

echo $obj1->getCount();

정적 상수가 아니라 상수일 뿐입니다.

class Patterns 
{ 
    const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"; 
    const INT = "/^\d+$/"; 
    const USERNAME = "/^\w+$/"; 
} 

echo Patterns::EMAIL;

No 클래스 상수에는 정적 레이블을 지정하거나 가시성을 할당할 수 없습니다.

http://php.net/manual/en/language.oop5.static.php

정적 또는 공용으로 선언할 필요는 없습니다.설명서의 예를 확인하십시오.

http://www.php.net/manual/en/language.oop5.constants.php

상수에 액세스하려면 어떻게 해야 합니까?

이것이 효과가 있을 것이라고 믿습니다.

echo Patterns::$EMAIL; //shows "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."

정적으로 선언하면 됩니다.

언급URL : https://stackoverflow.com/questions/3389380/can-you-use-static-constants-inside-classes-in-php