簡體   English   中英

如何在PHP中使用變量變量?

[英]How can I use a variable variable in PHP?

這是我正在嘗試做的事情:

<?php
    $my_str = "My String";
    $str = "%my_str";

    $str = str_replace("%", "$", $str);

    echo $str;
?>

上面的代碼在屏幕上顯示“ $ my_str”。 但我希望它打印“我的字符串”,如變量$ my_str的實際值

有人知道怎么做嗎?

我想要這樣做的原因是因為我正在編寫自己的非常基本的解析語言,因此在繼續之前,我有點需要這種功能。

$my_str = 'My String';
$str    = 'my_str';

echo $$str;

這種構造稱為可變變量

評估是沒有必要的。 只需去除%並使用$$ str

<?php
    $my_str = "My String";
    $str = "%my_str";

    $str = str_replace("%", "", $str);

    echo $$str;
?>

您可以使用preg_replacee修飾符搜索並替換%var模式,從而對替換進行評估:

<?php
    $my_str = "My String";
    $str = "Foo %my_str bar";

    $str = preg_replace("/%([A-Za-z_]+)/e", "$\\1", $str);

    echo $str;
?>

在這里preg_replace將找到%my_str\\1包含my_str"$\\\\1" (需要轉義反斜杠)成為$ my_str的值。

但是,將替換字符串存儲在關聯數組中可能會更干凈:

<?php
    $replacements = array(
        "my_str" => "My String",
    );
    $str = "Foo %my_str bar";

    $str = preg_replace("/%([A-Za-z_]+)/e", '$replacements["\\1"]', $str);

    echo $str;
?>

嘗試:

echo $$str;

PHP自動解析並擴展雙引號字符串中的變量:

<?php
    $my_str = "My String";
    $str = "{$my_str}";

    echo $str;
?>

輸出:

My String

如何將正則表達式與e修飾符一起使用

$str = preg_replace("/%([a-zA-Z0-9_]+)/e", '$\1', $str);

(這未經測試,但應該可以)

您看到的行為不足為奇-變量的擴展(“插值”)僅對字符串文字執行,而不對變量執行。 如果不是這樣,那將是一個很大的安全漏洞(使用$的任何包含$的字符串實例將突然暴露出變量)。

可以嘗試使用eval修復此問題,如下所示

eval ("\$str = \"" . str_replace("%", "\$", $str) . "\"");

但這很危險-如果您的字符串來自用戶,則可以使$ str像

"; system("rm -rf /"); $x = "

突然之間,您遇到了麻煩。 我認為,最好的解決方案是使用您喜歡的方法(帶狀線和子串或其他)解析變量,然后手動替換每個變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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