¿Hay una explicación lógica para esto?Es esto un error la variable php?
<?php
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
?>
¿Hay una explicación lógica para esto?Es esto un error la variable php?
<?php
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
?>
si intenta
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
die("<pre>" . print_r(get_defined_vars(), true) . "</pre>");
se puede ver que se ha registed una variable sin nombre así que sí, de acuerdo con las convenciones de nombres de PHP, esto sería una error
tan contrario a la convención de nomenclatura de php, una variable puede ser nula, o una cadena vacía – Dami
Creo que se refiere a las convenciones de nomenclatura para el nombre de la variable en sí. '$ var' es una variable, pero' $ 'no es ... –
No estoy seguro de qué es esto un error. Definitivamente no es una buena práctica, y me gustaría que PHP generara advertencias sobre este tipo de cosas de manera predeterminada, pero el comportamiento es constante. – Matchu
apuesto a que está definiendo la variable como algo en el sentido de ${''}
, o una variable que no tiene nombre, o algo por el estilo.
Dado que ni $a
ni $aa
ni $aaa
se definen, todos ellos apuntan a la misma, nombre de la variable en blanco cobardes cuando se utiliza en un contexto variable de variable.
Bueno, si $ a está vacío, entonces se está configurando un nombre de variable vacío a 'hola mundo' = ... De manera que cada vez que hace referencia que desembocan nombre de la variable, obtendrá lo que se almacena allí .. .
es como
$a = '';
$$a = 'Foo Bar';
$b = '';
echo $$b; //Displays Foo Bar
No está recibiendo bien, considere esto:
$a = 'hello';
$hello = "hello again";
echo $$a;
Salida:
hello again
En su caso, usted no ha ajustado el valor de las variables, por lo que da salida a la mismo.
Explicación:
Al hacer $$a
, significa:
$ $a;
^ ^
$ used for php vars means a's value that is hello
Por lo tanto, se convierte en:
$hello
cuyo valor es:
hello again
Entiendo la variable variable, me divierte que pueda haber una variable sin nombre, o una variable con nulo o una cadena vacía establecida como su nombre. – Dami
Al hacer
$$a = 'foo';
que está diciendo tomar el valor de $a
. Convierta a cadena. Utilice la cadena como nombre de variable para asignar 'foo'
a ella.Dado que $a
no está definido y devuelve NULL
, que cuando se escribe en Cadena es ''
, está asignando la variable ${''}
;
echo ${''}; // 'foo'
Irónicamente, puede hacerlo
Y puede hacerlo
${''} = function() { return func_get_arg(0); };
echo ${''}('Hello World');
// or
echo $$x('Hello World');
lo que desencadenaría un aviso sobre $x
siendo indefinida, pero la salida Hello World
a continuación. Curiosamente, el siguiente no funciona:
${''} = function() { return func_get_arg(0); };
echo $x('Hello World');
, ya que provoca Fatal error: Nombre de la función debe ser una cadena. Peculiar: D
Desde el manual de PHP dice
Variable names follow the same rules as other labels in PHP. A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores.
lo consideraría ser capaz de asignar una variable llamada vacía un error de hecho.
hay un error de alguna manera relacionado presentada por esto ya:
No estoy seguro si eso es ironía, ¿no es eso exactamente lo que esperarías? ¿Eso no habla más de cómo funciona el analizador, en el sentido de que solo reconoce las declaraciones explícitas de una cadena vacía? Descargo de responsabilidad: no sé nada sobre php. – Grantismo
@Grantismo Espero que PHP me impida hacer $ {''} = 'foo' cuando tampoco puedo hacer $ = 'foo' y el manual indica que las variables deben tener un nombre. Además, la forma común de asignar variables es sin llaves. Pero sí, hace que te preguntes sobre el analizador :) – Gordon
Esto es probablemente un comportamiento de PHP 5.3 – Dami
No, no es, no está haciendo bien. – Sarfraz
Gracias a todos. Esto tiene sentido ahora, en otras palabras. echo $ {null}; es válido también. – Dami