Можете ли вы использовать статические константы в 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
Ответы
Ответ 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;
Ответ 4
Константы класса Nope не могут быть помечены как статические, так и назначенные видимости.
http://php.net/manual/en/language.oop5.static.php
Ответ 5
Вам не нужно объявлять их статическими или общедоступными. Ознакомьтесь с примерами в руководстве:
http://www.php.net/manual/en/language.oop5.constants.php
Ответ 6
Как вы пытаетесь получить доступ к константам?
Я считаю, что это сработает:
echo Patterns::$EMAIL; //shows "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."
Если вы просто объявляете его статичным.