2011-08-22 10 views
6

¿es posible que se haga referencia a una variable sin usar $?

Por ejemplo:

if ($a != 0 && a == true) { 
... 
} 

Yo no lo creo, pero el código (no escrito por mí) no muestra un error y creo que es raro. He pasado por alto el código y a no es una constante tampoco.

+5

try: 'error_reporting (E_ALL^​​E_STRICT);' Y php le dirá que no pudo encontrar '$ a' y en su lugar usará literal' a' (que significa el carácter a) para la comparación. – Yoshi

+0

@Yoshi: Escriba una respuesta; p –

+0

@Tomalak Geret'kal Michael ya incluye este punto e incluso tiene una mejor explicación.; P – Yoshi

Respuesta

8

En PHP, se puede definir una constante, que entonces no tendría un $, pero una variable debe tener una. Sin embargo, esto NO es una variable, y no es un sustituto de una variable. Se pretende que las constantes se definan exactamente una vez y no se modifiquen a lo largo de la vida del script.

define('a', 'some value for a'); 

Además, no se puede interpolar el valor de una constante dentro de una entre comillas dobles o heredoc cadena:

$a = "variable a" 
define('a', 'constant a'); 

echo "A string containing $a"; 
// "A string containing variable a"; 

// Can't do it with the constant 
echo "A string containing a"; 
// "A string containing a"; 

Por último, PHP puede emitir un aviso para un Use of undefined constant a - assumed 'a' e interpretarlo como un error no indicada cadena "a". Mire en su registro de errores para ver si eso está sucediendo. En ese caso, "a" == TRUE es válido, ya que la cadena "a" no está vacía y se compara libremente con el valor booleano TRUE.

echo a == TRUE ? 'true' : 'false'; 
// Prints true 
// PHP Notice: Use of undefined constant a - assumed 'a' 
+0

Además de eso, de forma predeterminada, si PHP ve una constante indefinida, asumirá una constante con el valor de la cadena. Con su ejemplo de a, PHP interpretará eso como una constante llamada a, con un valor de 'a' (como una cadena). Esto causa un aviso o algo: aumente su valor de informe de error para verlo. – Narcissus

+0

@Narcissus gracias, ya se agregó mientras escribía su comentario :) –

2

Con este código:

if ($a != 0 && a == true) { 
    ... 
} 

que no está recibiendo ningún error porque usted (u otra persona) ha dicho PHP para no informar de errores, avisos o notificaciones con ese código. Se establece el informe de errores a un nivel superior y obtendrá un aviso:

Aviso: El uso de una constante indefinida - supone 'a' en ...

lo que significa que se lee a como una constante con un valor de "a". Esto no es lo que en realidad estás buscando supongo:

if ($a != 0 && "a" == true) { 
    ... 
} 

La segunda parte "a" == true siempre habrá true, así que esto es realmente así:

if ($a != 0) { 
    ... 
} 

ya que no es su código, uno solo puede suponer que esto no fue intencionado por el autor original.

Entonces: Las variables en PHP siempre comienzan con el signo de dólar $. Todo lo demás no es una variable.

1

Por definición, una variable DEBE comenzar con $. Además, no puede comenzar con un número, por lo que un nombre de variable como $ 1 badVar no es válido. Sin embargo, puede comenzar con letras o guiones bajos.

Cuestiones relacionadas