在括号内使用引号 - PHP / MySQL

时间:2012-11-28 16:51:50

标签: php mysql row

您好我读了一段时间,使用括号内的单引号更安全而不是不做,是真的吗?

echo $row[0];
echo $row[id];

echo $row['0'];
echo $row['id'];

3 个答案:

答案 0 :(得分:2)

是的,因为你可能有:

define("id", "something else");

$row = array(
    "id" => 5,
    "something else" => "foobar"
);

echo $row["id"]; // 5
echo $row[id]; // foobar

同样在E_STRICT模式$row[id]会给您一个警告。这就是为什么你应该始终使用E_STRICT开发。将error_reporting(E_ALL | E_STRICT);放在脚本顶部即可将其打开。

$row[0]$row["0"]是等价的,您可以根据需要使用这些(索引数组与关联数组?)

答案 1 :(得分:1)

  • 您的第一个示例:[0]['0']

    这不需要引号,因为键是数字。

  • 您的第二个示例:[id]['id']

    这绝对应该有引号。没有引号的变体是PHP中的遗留功能,实际上不应再使用它。

    如果您不包含引号,那么您实际上是在告诉PHP使用名为define()的{​​{1}},而不是字符串id。在大多数情况下,这是有效的,因为PHP有​​一个功能,如果你指定一个不存在的定义,它会假定字符串等效,而不是抛出错误。 (这是PHP最糟糕的设计决策之一,但这不是重点)

    关键在于,在大多数情况下,无论哪种方式都会完全相同。没有引号的版本将运行得更慢,因为它需要搜索定义并在找不到它时进行字符串转换,但它不会慢得多;你不会注意到它。

    真正的危险是,如果你的代码中的其他地方你创建了一个具有相同名称的定义 - 例如:

    id

    现在,PHP会将 define('id','blahblah'); 视为$var[id],这会破坏您的代码。

    在使用定义时并不总是很容易知道 - 特别是如果您包括第三方库 - 这意味着虽然没有引号的代码现在可以使用,但是不知道什么时候可能会突然中断,而你却无法解决原因。

    因此建议总是在数组元素名称为字符串时使用引号。

答案 2 :(得分:0)

quote表示字符串文字,而unquoted表示整数或常量。

如果要在关联数组中查找命名数组键,通常需要使用字符串文字。 I.E $row['id']而不是$row[id](这不应该起作用)。

如果您正在寻找数字数组键,则字符串将转换为整数。因此$row['0']应评估为$row[0]。不过,我认为使用实际整数($row[0])是一种更好的做法。我不确定是否由于变量转换而导致实际性能损失,但最好使用正确的数据类型以提高可读性和准确性。