Можете ли вы использовать статические константы в PHP? - PullRequest
43 голосов
/ 02 августа 2010

Я ожидал, что следующее сработает, но, похоже, это не так.

<?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

Ответы [ 6 ]

84 голосов
/ 02 августа 2010

Вы можете использовать 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
32 голосов
/ 02 августа 2010

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

const обозначает константу класса.Они отличаются от обычных переменных, так как перед ними нет символа «$», и перед ними не должно быть модификаторов видимости (public, protected, private).Их синтаксис:

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();
10 голосов
/ 02 августа 2010

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

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;
7 голосов
/ 02 августа 2010

Нет, константы класса не могут быть помечены как статические или присвоенные видимости.

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

2 голосов
/ 02 августа 2010

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

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

0 голосов
/ 02 августа 2010

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

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

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

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

...