什么是可變變量?
在PHP中有一個其他類型的變量,“可變變量”。可變變量是一種PHP獨特的變量,他允許動態改變一個變量的名稱。
可變變量的工作原理
這個特性的工作原理是用一個變量的值作為另一個變量的名稱。例如,我們可以設置$str的值:
$name = 'str';
於是,我們就可以用
name 取代$str。
name = 5;
這個代碼等價於:
$str= 5;
使用方法
使用可變變量就是在變量的前面多加一個美元符號“$”。
數組使用可變變量
為了使用數組的可變變量名,你需要解決一個歧義問題。就是,如果你寫$$a[1],解析器需要明白究竟你的意思是要把$a[1]當成一個變量,還是要把$$a當成變量、[1]指的是這個變量的索引。解決這個歧義問題的語法是:第一種情況使用${$a[1]},第二種情況使用${$a}[1]
類屬性也可以通過可變屬性名來訪問。可變屬性名從產生調用所在的變量的訪問范圍內獲取。例如,如果你的表達式是這樣的:$foo->$bar,那么運行時將會在本地變量范圍內尋找變量$bar,它的值將會做為$foo對象的一個屬性名。如果$bar是個數組也可以使用。
可變變量名不能用於PHP函數和類里的超級全局數組變量上。變量$this也是一個不能動態取名的特殊變量。
實例
下面的實例使用可變變量改變變量的名稱。代碼如下:
1 <?php 2 header("content-type:text/html;charset=utf-8"); //設置編碼
3 $str='trans'; //聲明變量$str
4 $trans='PHP中文網'; //聲明變量$trans
5 echo $str; //輸出變量$str
6 echo "<br/>"; 7 echo $$str; //通過可變變量輸出$trans的值
8 ?>
實例詳解:
首先定義兩個變量$str和$trans,並且輸出變量$str的值,然后使用可變變量來改變變量$str的名稱,最后輸出改變名稱后的變量值
運行結果如下:
PHP中雙引號會解析變量
部分PHP應用在寫配置文件或者使用preg_replace()函數第二個參數賦值變量時,會用到雙引號(")來代表string類型給變量賦值
注意:
在PHP語言中單引號和雙引號是有區別的,單引號代表純字符串,雙引號則會解析中間變量,所以在使用雙引號時,會存在命令執行漏洞,我們來看一個測試
代碼如下:
1 <?php 2 $a="$(@phpinfo())"; 3 ?>
當運行這段代碼時,phpinfo()函數會成功執行,輸出內容如圖
這里有個地方需要注意,代碼${@phpinfo()}中的'@'符號是必須存在的,不然就會無法執行,但是除了“@”符號還有其他的寫法也可以,只要不影響PHP規范均可執行,舉例如下:
(1)第一個字符為空格
(2)第一個字符為Tab
(3)第一個字符為注釋符/**/
(4)第一個字符為加號(+)
(5)第一個字符為減號(-)
除了這些還有如~,\,!等等
參考:https://www.php.cn/php-weizijiaocheng-361041.html