代码之家  ›  专栏  ›  技术社区  ›  dkinzer

访问引用键的数组

  •  3
  • dkinzer  · 技术社区  · 14 年前

    我可以使用 $array[key] $array['key']

    有没有理由避免使用一个而另一个?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Gumbo    14 年前

    使用后一种变体 $array['key'] . 前者只起作用,因为PHP是宽容的,并且假定字符串值 key 如果没有名为 钥匙 :

    始终在字符串文本数组索引周围使用引号。例如, $foo['bar'] 是正确的,而 $foo[bar] 不是。[_]这是错误的,但它起作用了。原因是这个[_]有一个未定义的常量( bar )而不是一根绳子( 'bar' -注意引号)。

    也见 Array do's and don'ts .

    现在与使用纯PHP代码访问数组相反 variable parsing in double quoted strings 您实际上需要不带引号地编写它,或者使用 curly brace syntax :

    [_]在双引号字符串中,不使用引号包围数组索引是有效的,因此 "$foo[bar]" 是有效的。有关原因的详细信息,请参阅以上示例以及有关字符串中变量解析的部分。

    所以:

    // syntax error
    echo "$array['key']";
    
    // valid
    echo "$array[key]";
    echo "{$array['key']}";
    
        2
  •  2
  •   Marc B    14 年前

    PHP将对无引号版本发出警告( $array[key] )如果没有名为 key 定义,并静默地将其转换为 $array['key'] . 考虑一下,如果您有以下情况,调试代码时会遇到的问题:

    $array['foo'] = 'baZ'
    echo $array[foo];
    echo $array['foo'];
    echo "$array[foo]";
    echo "{$array['foo']}";
    echo "{$array[foo]}";
    
    define('foo', 'baR');
    echo $array[foo];
    echo $array['foo'];
    echo "$array[foo]";
    echo "{$array['foo']}";
    echo "{$array[foo]}";
    

    试试看,但要确保你已经启用了警告。( error_reporting(E_ALL) display_errors(1) )

        3
  •  0
  •   Alex Howansky    14 年前

    $array[key] 使用不正确。在这种情况下,“key”将被视为常量(即,通过define())而不是字符串。在没有常量命名键的情况下,PHP会假定您的意思是“key”,并为您“fix”,然后发出警告。