Можно ли использовать статические константы в 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

45
задан Naveed 24 June 2011 в 12:49
поделиться

6 ответов

Вы можете использовать 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 const, как это:

Patterns::USERNAME
87
ответ дан 26 November 2019 в 20:53
поделиться

Это не статические константы, а просто константы

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;
10
ответ дан 26 November 2019 в 20:53
поделиться

В PHP статика и константа - это две разные вещи.

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();
33
ответ дан 26 November 2019 в 20:53
поделиться

Константы класса Nope не могут быть помечены как статические или наделены видимостью.

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

7
ответ дан 26 November 2019 в 20:53
поделиться

Вам не нужно объявлять их статическими или публичными. Посмотрите примеры в руководстве:

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

2
ответ дан 26 November 2019 в 20:53
поделиться

Как вы пытаетесь получить доступ к константам?

Я считаю, что это сработает:

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

Если вы просто объявите его статическим.

0
ответ дан 26 November 2019 в 20:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: