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
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
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();
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;
Les constantes de classe Nope ne peuvent pas être étiquetées statiques ni affectées de visibilité.
Vous n'avez pas besoin de les déclarer statiques ou publics. Découvrez les exemples dans le manuel:
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.