我希望以下工作正常,但似乎没有。
<?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
答案 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)
不能将类常量标记为静态,也不能指定可见性。
答案 4 :(得分:2)
您无需将它们声明为静态或公开。查看手册中的示例:
答案 5 :(得分:0)
您是如何尝试访问常量的?
我相信这会奏效:
echo Patterns::$EMAIL; //shows "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."
如果您只是将其声明为静态。