PHP:在关联数组索引中使用空格

18

这是不良实践/可能会导致问题吗?

$_SESSION['stuff to keep']

与调用 str_replace() 函数来替换索引不同。

4个回答

21

这是一种不好的实践方法,但并非因为空格而如此。

// file foo.php
$_SESSION['stuff to keep'] = 42;

// file bar.php
if ($_SESSION['stufft o keep'] == 42) frobnicate();

在这里,你的代码会默默地出现问题,而且可能需要一段时间才能找到错误。良好的实践是使用PHP强制执行的名称,例如类常量:

$_SESSION[Stuff::TO_KEEP] = 42;

if($_SESSION[Stuff::TOO_KEEP] == 42) 
// error: no constant TOO_KEEP in class Stuff

您可以将该常量定义为任何您认为有趣或易读的常量,例如"stuff to keep"(带空格)。当然,extract() 和转换为 object 将不再起作用,但您在会话中本来就不应该这样做。

允许用户输入的文本进入会话密钥当然是明显的安全漏洞。


我认为有一个例外情况。如果您有一个语言数组,最好将可翻译的短语也放在键中。 - Adam

10
你可以这样做,它会起作用 - 即使我通常不在手动设置数组键时这样做,但有时当我从文件中获取键时(例如),就会发生这种情况,并且我从未遇到过任何问题。
如果您正在使用extract函数,可能会导致某些问题。如果它创建具有空格名称的变量(不知道是否会这样做),那么访问变量将会很困难(但不是不可能)。

1
+1 好观点 - 如果要提取具有无效名称键的数组,提取操作将抛出错误(警告?)。 - Adam Hopkinson

6

这不会引起问题,但数组键通常被视为变量名,因此应该考虑相同的因素进行选择。


0

在我看来,似乎添加了不必要的空格... 我通常不使用空格。如果您使用空格,请确保引用数组键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接