2010-08-02 20 views
27

Esperaba que lo siguiente funcionara, pero parece que no.¿Se pueden usar constantes estáticas en PHP?

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

me sale syntax error, unexpected T_CONST, expecting T_VARIABLE

Respuesta

66

Puede usar const en clase como esta:

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 const así:

Patterns::USERNAME 
+1

Cuando es un const, debe ser manejado como estático internamente por el compilador de PHP, creo, ya que su valor no se puede cambiar. –

+1

pero los valores de 'variables estáticas' se pueden cambiar por la forma en que se manejan como' static' porque no se pueden cambiar implícitamente pero pueden cambiar si depende de una variable global y la 'variable global' cambia antes de' instancia' de 'clase' se crea –

6

constantes de clase Nop no pueden ser etiquetados estática ni asignados visibilidad.

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

+0

¿Cuál es la mejor alternativa en su opinión? Si tiene que escribir la clase de ejemplo de una manera aceptable en PHP, ¿cómo lo haría? ¡Gracias! –

+0

@Emanuil: luego eliminaría palabras clave "públicas" y "estáticas" ;-) – zerkms

+0

@Sarfraz: Quiero tener una clase que contenga una colección de expresiones regulares de uso común que todas mis aplicaciones pueden usar. –

0

¿Cómo está usted tratando de acceder a las constantes?

creo que esto funcionaría:

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

Si sólo declarará como estática.

+3

no es una constante en tu muestra, sino una variable estática. – zerkms

+0

@zerkms por lo que dije que si lo declaras estático @mattbasta ¿no es eso lo que él quería? – Chris

+0

puede ver lo que quería en la respuesta marcada. – zerkms

7

No son constantes estáticas, simplemente constantes de

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

En PHP , estático y const son dos cosas diferentes.

const denota una constante de clase. Son diferentes a las variables normales ya que no tienen el '$' frente a ellos, y no pueden tener ningún modificador de visibilidad (público, protegido, privado) antes que ellos. 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 modificarse. 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(); 
+0

A partir de PHP 7.1.0 [las constantes de clase pueden tener modificadores de visibilidad] (https://secure.php.net/manual/en/language.oop5.constants.php#language.oop5. basic.class.this). – totymedli

Cuestiones relacionadas