Emanuil Rusev
Esperaba que lo siguiente funcionara, pero no parece funcionar.
<?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+$/";
}
Porque arroja este error:
syntax error, unexpected T_CONST, expecting T_VARIABLE
naveed
Puedes usar const en clase así:
class Patterns {
const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
const INT = "/^\d+$/";
const USERNAME = "/^\w+$/";
}
y puede acceder USERNAME
constante así:
Patterns::USERNAME
-
Cuando es una constante, creo que el compilador de PHP debe manejarlo como estático internamente, ya que su valor no se puede cambiar.
– Albahaca Musa
19 de diciembre de 2015 a las 14:34
-
pero valores de
static variables
se puede cambiar por la forma en que estos se manejan comostatic
porque no se pueden cambiar implícitamente, pero pueden cambiar si depende de una variable global y elglobal variable
cambios antes de lainstance
declass
es creado– Ravinder Payal
16 mayo 2016 a las 13:58
-
¿Este método no crearía copias de las constantes para cada nueva instancia o me equivoco? ¿Es posible crear constantes de clase que se refieran a una sola referencia estática o simplemente no es posible en php?
– cjsimon
11 de mayo de 2018 a las 0:01
-
Desde el manual: “Tenga en cuenta que las constantes de clase se asignan una vez por clase, y no para cada instancia de clase”.
– cjsimon
18 de junio de 2018 a las 17:05
En PHP, static y const son dos cosas diferentes.
const denota una constante de clase. Son diferentes a las variables normales ya que no tienen el ‘$’ delante de ellas y no pueden tener ningún modificador de visibilidad (público, protegido, privado) delante de ellas. Su sintaxis:
class Test
{
const INT = "/^\d+$/";
}
Porque son constantes, son inmutables.
Estático denota datos que se comparten entre objetos de la misma clase. estos datos pueden ser modificado. Un ejemplo sería una clase que realiza un seguimiento de cuántas instancias están en juego en un momento dado:
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();
-
A partir de PHP 7.1.0 las constantes de clase pueden tener modificadores de visibilidad.
– totymedli
13 de febrero de 2018 a las 1:36
No son constantes estáticas, solo 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;
No, las constantes de clase no se pueden etiquetar como estáticas ni se les puede asignar visibilidad.
No es necesario declararlos estáticos o públicos. Echa un vistazo a los ejemplos en el manual:
cris
¿Cómo estás tratando de acceder a las constantes?
Creo que esto funcionaría:
patrones de eco::$CORREO ELECTRÓNICO; //muestra "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."
If you just declare it as static.