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

Ema*_*sev 45 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+$/";
}
Run Code Online (Sandbox Code Playgroud)

我明白了 syntax error, unexpected T_CONST, expecting T_VARIABLE

Nav*_*eed 87

您可以在类中使用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+$/";
}
Run Code Online (Sandbox Code Playgroud)

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

Patterns::USERNAME
Run Code Online (Sandbox Code Playgroud)

  • 当它是一个常量时,我​​相信它应该由 PHP 编译器在内部作为静态处理,因为它的值不能改变。 (2认同)
  • 这种方法不会为每个新实例创建常量的副本还是我错了?是否可以创建引用单个静态引用的类常量,或者这在 php 中是不可能的? (2认同)
  • 来自[manual](http://php.net/manual/zh/language.oop5.constants.php):“请注意,类常量每个类分配一次,而不是每个类实例分配一次。” (2认同)

Maj*_*ons 33

在PHP中,static和const是两个不同的东西.

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

class Test
{
    const INT = "/^\d+$/";
}
Run Code Online (Sandbox Code Playgroud)

因为它们是不变的,所以它们是不可改变的.

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();
Run Code Online (Sandbox Code Playgroud)

  • 从PHP 7.1.0开始[类常量可以具有可见性修饰符](https://secure.php.net/manual/en/language.oop5.constants.php#language.oop5.basic.class.this). (7认同)

Mar*_*ker 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;
Run Code Online (Sandbox Code Playgroud)


Sar*_*raz 7

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

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

  • 从PHP7.1开始,常量可以获得可见性 - > http://php.net/manual/en/language.oop5.visibility.php (3认同)