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

2022-08-30 09:22:50

我预计以下内容会起作用,但似乎没有。

<?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+$/";
}

并且可以像这样访问const:USERNAME

Patterns::USERNAME

答案 2

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

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

推荐