Can you use static constants inside classes in PHP?

57,486

Solution 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

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

Solution 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;

Solution 4

Nope class constants can't be labeled static nor assigned visibility.

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

Solution 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

Share:
57,486
Emanuil Rusev
Author by

Emanuil Rusev

Designer, developer, minimalist, maker of Nota, Historie, Parsedown.

Updated on July 08, 2022

Comments

  • Emanuil Rusev
    Emanuil Rusev almost 2 years

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

    Because it throws this error:

    syntax error, unexpected T_CONST, expecting T_VARIABLE