2011-11-11 21 views
7

Actualmente estoy programando un sitio web (en PHP4). Planeo guardar valores, que no cambian durante el tiempo de ejecución, en constantes. Esos son, por ejemplo, el número de versión de datos de inicio de sesión para la base de datos.¿Cuándo y cómo usar constantes en PHP?

Pregunta 1: ¿hay algún problema (de seguridad) que pueda surgir al guardar datos en constantes?

En el momento en que haga lo siguiente para definir y llamar a la constante:

define("VERSION", "1.0"); 
echo "Current version: ".VERSION."."; // Result: "Current version: 1.0." 

Hay una cosa que me molesta: En caso de una constante no está definido, el nombre de la variable "mal" se devuelve en vez de por ejemplo NULL.

define("VERSION", "1.0"); 
echo "Current version: ".VERSIONXXX."."; // Result: "Current version: VERSIONXXX." 

Una solución que encontró para obtener un mensaje de error y el valor de retorno "NULO" cuando accidentalmente introducido un nombre equivocado constante está utilizando la función constant():

define("VERSION", "1.0"); 
echo "Current version: ".constant("VERSIONXXX")."."; // Result: "Current version: ." 

Pregunta 2: ¿Se puede prevenir de una manera diferente, que PHP devuelve el nombre de la variable no existente?

Pregunta 3: ¿Debería devolverse siempre el valor de una constante en PHP utilizando la función constant()?

+4

¿Hay alguna razón por la que te quedes en PHP4, que ya no está activo? – danielrsmith

Respuesta

3

en orden inverso:

Pregunta 3: No se Pregunta 2: No realmente, pero puede hacer ajustes.

debido a (Pregunta 1 :) error_reporting. Su servidor web PHP está configurado ocultar algunos errores.Si se agrega

error_reporting(E_ALL); 

a la cabeza guiones, obtendrá un uso

de MY_CONST constante indefinida - asumido 'MY_CONST'

error. Desafortunadamente, es un problema que surge de la larga historia de PHP, que las constantes se pueden interpretar como cadenas.

Si no puede ser shure una constante se estableció en primer lugar, se puede uso definido

if(defined('MY_CONSTANT') { 
    //do something 
} 

Pero mi opinión personal no debe haber muchos casos a necesitar esto, ya que la palabra implica constante solos una presencia garantizada. La única excepción que puedo pensar es la típica prueba de encabezado.

if(!defined('MY_APP_IS_PRESENT')) { 
    die('You can not call this file on its own, please use index.php.'); 
} 

Y una última Tipp: Ir y hacer usted mismo una función errorhandler, tal vez incluso con firephp?

1

Bueno, siempre puedes usar la función defined para asegurarte de que existe la constante. En combinación con una declaración ternaria, usted podría simplemente eco de una cadena vacía, algo así como:

echo defined(VERSION) ? VERSION : ""; 
No

la mejor respuesta, pero se puede trabajar?

manual de PHP para defined() está en http://php.net/manual/en/function.defined.php

6
  1. Si intenta utilizar una constante que no existe, PHP asume automagicamente es una cadena en lugar, por lo que se ve VERSIONXXX.

  2. IIRC arroja una advertencia si su informe de error está en el nivel apropiado. La mejor solución es asegurarse de que su código utilice los nombres constantes adecuados.

  3. Si conoce el nombre de la constante, es más fácil/mejor usarla directamente. echo MY_CONSTANT
    Si no conoce el nombre de la constante (por ejemplo, su nombre está en una variable), utilice constant():

 
    $name = 'MY_CONSTANT'; 
    echo constant($name); 
Cuestiones relacionadas