Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

Ответ 2

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

const обозначает константу класса. Они отличаются от обычных переменных, поскольку перед ними нет "$", и перед ними не могут быть модификаторы видимости (публичные, защищенные, частные). Их синтаксис:

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

Поскольку они постоянны, они неизменяемы.

Static обозначает данные, которые совместно используются объектами одного класса. Эти данные могут быть изменены. Примером может служить класс, который отслеживает, сколько экземпляров играет в любой момент:

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();

Ответ 3

Они не являются статическими константами, просто константами

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;

Ответ 6

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

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

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

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