PHP字符串插值中$_POST无法生效的问题咨询
为啥你的PHP字符串插值会失效?
嘿,这问题我太熟悉了!咱们一步步来搞清楚原因~
首先得明确PHP双引号字符串的解析规则:双引号里的普通变量(比如$usr_name)会被自动替换成对应的值,但关联数组带引号的键名直接写进去的话,PHP没法正确识别它是数组元素的引用。
先看你的两种写法:
能正常运行的代码:
$usr_name = $_POST['usr_name']; echo "<p>Your name is $usr_name </p>";这里你把
$_POST['usr_name']的值先存到了普通变量$usr_name里,双引号里的$usr_name是标准的变量标识符,PHP一眼就能认出,所以能正确解析插值。不能运行的代码:
echo "<p>Your name is $_POST['usr_name'] </p>";问题出在
$_POST['usr_name']里的单引号——PHP解析双引号字符串时,遇到$_POST[之后,会把后面的'usr_name'当成普通字符串的一部分,而不是数组的键名,自然就没法正确获取到POST的值,甚至可能直接输出$_POST['usr_name']这个文本,或者抛出语法错误。
给你几个解决办法:
方法1:用花括号包裹数组元素(最推荐的写法)
把数组元素用{}包起来,告诉PHP这是一个完整的变量/数组引用:echo "<p>Your name is {$_POST['usr_name']}</p>";方法2:提前赋值给普通变量(就是你已经在用的方法)
这种写法可读性很高,尤其在复杂场景下不容易出错,继续用完全没问题。方法3:用字符串连接符
把字符串和数组元素用.连接起来,完全绕开插值解析的问题:echo "<p>Your name is " . $_POST['usr_name'] . "</p>";
额外小提醒:
如果是数字索引的数组(比如$arr[0]),直接写在双引号里是没问题的,但关联数组的字符串键名一定要用花括号包裹,或者提前赋值哦~
内容的提问来源于stack exchange,提问作者Thorsten
相关产品推荐
相关产品推荐

