你能在PHP中使用静态常量吗?

时间:2010-08-02 15:47:53

标签: php constants

我希望以下工作正常,但似乎没有。

<?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 个答案:

答案 0 :(得分:83)

你可以像这样在类中使用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

答案 1 :(得分:31)

在PHP中,static和const是两回事。

const表示一个类常量。它们与普通变量不同,因为它们前面没有'$',并且在它们之前不能有任何可见性修饰符(public,protected,private)。他们的语法:

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

答案 2 :(得分:10)

它们不是静态常量,只是常量

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;

答案 3 :(得分:7)

不能将类常量标记为静态,也不能指定可见性。

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

答案 4 :(得分:2)

您无需将它们声明为静态或公开。查看手册中的示例:

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

答案 5 :(得分:0)

您是如何尝试访问常量的?

我相信这会奏效:

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

如果您只是将其声明为静态。