這是否有合理的解釋?這是一個PHP變量的變量錯誤?
<?php
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
?>
這是否有合理的解釋?這是一個PHP變量的變量錯誤?
<?php
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
?>
如果您嘗試
$$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>");
你可以看到,它已經臨時用戶與沒有名字的變量,因此,是的,根據PHP的命名規則,這將是一個錯誤
我敢打賭,它的定義變量的東西的${''}
沿着這些線路的影響,或沒有名字的變量,或東西。
由於既不$a
也不$aa
也不$aaa
被定義,它們在可變可變上下文中使用時都指向相同的時髦,空白變量名。
那麼,如果$ a是空的,那麼您將設置一個空變量名稱='hello world'...因此,每當您引用空變量名稱時,您都會得到存儲的內容。 。
這就像
$a = '';
$$a = 'Foo Bar';
$b = '';
echo $$b; //Displays Foo Bar
你沒有得到它的權利,考慮一下:
$a = 'hello';
$hello = "hello again";
echo $$a;
輸出:
hello again
在你的情況,你有沒有設置下列變量的值,因此它輸出相同。
說明:
當你做$$a
,它意味着:
$ $a;
^ ^
$ used for php vars means a's value that is hello
所以就變成:
$hello
,其值是:
hello again
我瞭解變量變量,我只是覺得可以有一個未命名的變量,或者一個變量的空值或空字符串作爲其名稱。 – Dami 2010-07-23 13:22:32
在做
$$a = 'foo';
你說拿的$a
值。將其轉換爲字符串。使用字符串作爲變量名稱來爲其分配'foo'
。由於$a
未定義,並且返回NULL
,當將字符串轉換爲字符串時,它是''
,您正在分配變量${''}
;
echo ${''}; // 'foo'
諷刺的是,你可以做
你可以做
${''} = function() { return func_get_arg(0); };
echo ${''}('Hello World');
// or
echo $$x('Hello World');
這將觸發通知有關$x
被不確定的,但輸出Hello World
然後。夠滑稽的,下面不工作:
${''} = function() { return func_get_arg(0); };
echo $x('Hello World');
,因爲它觸發致命錯誤:函數名稱必須是一個字符串。新奇:d
由於PHP手冊說
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.
我會考慮能確實分配一個空命名變量的錯誤。
有一個有點相關的bug提交了本已:
這可能是不,它不是,他沒有得到正確的PHP 5.3的行爲 – Dami 2010-07-23 13:12:30
。 – Sarfraz 2010-07-23 13:20:18
謝謝大家。換句話說,這是有道理的。 echo $ {null}; 也是有效的。 – Dami 2010-07-23 13:21:04