[英]What does ${ } mean in PHP syntax?
我已經使用 PHP 很長時間了,但我只是看到了類似的東西,
${ }
准確地說,我在 PHP Mongo 頁面中看到了這一點:
$m = new Mongo("mongodb://${username}:${password}@host");
那么, ${ }
做了什么? 使用 Google 或在 PHP 文檔中搜索$
、 {
和}
等字符非常困難。
${ }
(美元符號大括號)被稱為簡單語法。
它提供了一種以最少的工作量在字符串中嵌入變量、數組值或對象屬性的方法。
如果遇到美元符號 ($),解析器會貪婪地獲取盡可能多的標記來形成有效的變量名。 將變量名稱括在花括號中以明確指定名稱的結尾。
<?php $juice = "apple"; echo "He drank some $juice juice.".PHP_EOL; // Invalid. "s" is a valid character for a variable name, but the variable is $juice. echo "He drank some juice made of $juices."; // Valid. Explicitly specify the end of the variable name by enclosing it in braces: echo "He drank some juice made of ${juice}s."; ?>
上面的例子將輸出:
He drank some apple juice. He drank some juice made of . He drank some juice made of apples.
它是一個嵌入變量,所以它知道在哪里停止尋找變量標識符的結尾。
字符串中的${username}
表示字符串外的$username
。 這樣,它不認為$u
是變量標識符。
它在您提供的 URL 等情況下很有用,因為它不需要標識符后的空格。
請參閱有關它的php.net 部分。
我到處閱讀關於在字符串中使用${var_name}
和{$var_name}
來分隔變量的信息,但我最近遇到了這個:
<?php
$zb8b5 = 419;
$GLOBALS['t91a5'] = Array();
global $t91a5;
$t91a5 = $GLOBALS;
${"\x47\x4c\x4fB\x41\x4c\x53"}['t112f6f9'] = "\x63\x5c\x76\x48\x36\x47\x43\x7b\x35\x7c\x27...";
.
.
.
我在修復被黑網站時發現了上述代碼。
注意最后一行。 事實證明,也可以使用${}
語法來聲明具有奇數名稱的變量。
所以你可以做(奇怪的)事情,比如:
<?php
${"my_var"} = 'asdf';
var_dump($my_var);
${"other_var"}['a_pos'] = 'my value';
var_dump($);
?>
輸出:
string(4) "asdf"
array(1) {
["a_pos"]=>
string(8) "my value"
}
當然,這確實是一種糟糕的做法,除非您像這些人想要的那樣試圖打亂您的代碼。
我找不到任何關於${}
外部字符串使用的文檔。
PHP 文檔只提供了這種用法的簡要說明,而且我也只在惡意軟件樣本中看到過它。
從文檔中:
為了在數組中使用可變變量,您必須解決歧義問題。 也就是說,如果您編寫 $$a[1] 則解析器需要知道您是否打算使用 $a[1] 作為變量,或者您是否希望 $$a 作為變量,然后是 [1] 索引那個變量。 解決這種歧義的語法是:${$a[1]} 用於第一種情況,${$a}[1] 用於第二種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.