我尝试使用以下语法进行重定向:
header("location: readMore.php?id=$post['post_id']");
但这没有用。只有在有人建议用大括号括起来之后它才起作用$post['post_id']
!
正确的语法是:
header("location: readMore.php?id={$post['post_id']}");
在这种情况下,大括号有什么作用?
Quoting 手册:
When a string用双引号或heredoc指定,变量都在其中解析。
有两种类型的语法:simple一和一complex一。简单的语法是最常见和方便的。它提供了一种嵌入变量的方法,array值,或object财产在一个string以最小的努力。
复杂的语法可以通过表达式周围的花括号来识别。
您的第一个代码使用简单的语法,第二个代码使用复杂的语法。
手册没有明确说明这一点,只是简单语法中的空格似乎是一个错误,使您的第一个代码无效。复杂的语法appears据我所知,支持与常规 PHP 相同的语法,但这似乎并没有在任何地方得到实际保证。
一般来说,字符串插值是相当笨拙的:
$a = [['derp']];
$b = $a[0];
// Works. It prints derp
echo "$b[0]";
// Doesn't work. It throws an error
echo "$b[ 0 ]";
// Works. It prints derp
echo "{$b[ 0 ]}";
// Doesn't work. It prints Array[0]
echo "$a[0][0]";
// Works. It prints derp
echo "{$a[0][0]}";
// Doesn't work. It prints { Array[0] }
echo "{ $a[0][0] }";
你会遇到类似的问题$object -> foo
and $object->foo->bar
.
对我来说,这纯粹是疯狂。因此,我尽可能避免使用双引号字符串(我使用它们的唯一目的是转义序列,例如"\n"
)。我改为使用单引号和字符串连接,如下所示:
header( 'location: readMore.php?id=' . $post[ 'post_id' ] );
这可以让你使用actualPHP 变量语法没有字符串插值这个可怕的死亡陷阱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)