簡體   English   中英

"${ } 在 PHP 語法中是什么意思?"

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM