问题
I expected the following to work but it doesn't seem to.
<?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+$/";
}
I get syntax error, unexpected T_CONST, expecting T_VARIABLE
回答1:
You can use const in class like this:
class Patterns {
const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
const INT = "/^\d+$/";
const USERNAME = "/^\w+$/";
}
And can access USERNAME
const like this:
Patterns::USERNAME
回答2:
In PHP, static and const are two different things.
const denotes a class constant. They're different than normal variables as they don't have the '$' in front of them, and can't have any visibility modifiers (public, protected, private) before them. Their syntax:
class Test
{
const INT = "/^\d+$/";
}
Because they're constant, they're immutable.
Static denotes data that is shared between objects of the same class. This data can be modified. An example would be a class that keeps track of how many instances are in play at any one time:
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:
They're not static constants, just constants
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 class constants can't be labeled static nor assigned visibility.
http://php.net/manual/en/language.oop5.static.php
回答5:
You don't need to declare them static or public. Check out the examples in the manual:
http://www.php.net/manual/en/language.oop5.constants.php
回答6:
How are you trying to access the constants?
I believe this would work:
echo Patterns::$EMAIL; //shows "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."
If you just declare it as static.
来源:https://stackoverflow.com/questions/3389380/can-you-use-static-constants-in-php