web-dev-qa-db-fra.com

Pouvez-vous utiliser des constantes statiques en PHP?

Je m'attendais à ce que ce qui suit fonctionne, mais cela ne semble pas.

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

Je reçois syntax error, unexpected T_CONST, expecting T_VARIABLE

44
Emanuil Rusev

Vous pouvez utiliser const en classe comme ceci:

class Patterns {
    const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
    const INT = "/^\d+$/";
    const USERNAME = "/^\w+$/";
}

Et peut accéder à USERNAME const comme ceci:

Patterns::USERNAME
85
Naveed

En PHP, statique et const sont deux choses différentes.

const désigne une constante de classe. Ils sont différents des variables normales car ils n'ont pas le "$" devant eux et ne peuvent pas avoir de modificateurs de visibilité (public, protégé, privé) devant eux. Leur syntaxe:

class Test
{
    const INT = "/^\d+$/";
}

Parce qu'ils sont constants, ils sont immuables.

Statique indique des données partagées entre des objets de la même classe. Ces données peuvent être modifiées. Un exemple serait une classe qui garde une trace du nombre d'instances en jeu à un moment donné:

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();
32
Major Productions

Ce ne sont pas des constantes statiques, juste des constantes

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;
10
Mark Baker

Les constantes de classe Nope ne peuvent pas être étiquetées statiques ni affectées de visibilité.

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

7
Sarfraz

Vous n'avez pas besoin de les déclarer statiques ou publics. Découvrez les exemples dans le manuel:

http://www.php.net/manual/en/language.oop5.constants.php

2
Scott Saunders

Comment essayez-vous d'accéder aux constantes?

Je crois que cela fonctionnerait:

echo Patterns::$EMAIL; //shows "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."

Si vous le déclarez simplement comme statique.

0
Chris