我刚刚看到了一段非常奇怪的PHP代码:
$oink{'pig'} = 1;
var_dump($oink);
$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */
它的工作原理类似于数组,但在手册中没有提到。这是什么?
我刚刚看到了一段非常奇怪的PHP代码:
$oink{'pig'} = 1;
var_dump($oink);
$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */
它的工作原理类似于数组,但在手册中没有提到。这是什么?
在手册中提到过,{}
只是[]
的另一种语法表达方式,用于访问数组元素,详情请见§ 使用方括号语法访问数组元素。自PHP 7.4.0起,这种方法已被弃用,自PHP 8.0.0起就不再支持了。
注意:
在 PHP 8.0.0之前,对于访问数组元素,方括号和花括号可以互换使用(例如,在上面的示例中,$array[42] 和 $array{42} 执行的操作相同)。从PHP 7.4.0开始,花括号语法已被弃用,并在PHP 8.0.0中不再支持。
对于字符串也是同样的情况,详情请见§ 通过字符进行访问和修改字符串:
可以使用方括号来指定字符串中所需字符的从零开始的偏移量进行访问和修改,例如
$str[42]
。在此目的下,将字符串视为字符数组即可[...]。注意:在 PHP 8.0.0之前,也可以使用花括号来访问字符串,例如 $str{42},具有相同的目的。从PHP 7.4.0开始,这种花括号语法已被弃用,并在PHP 8.0.0中不再支持。
在手册中提到了,但很难理解:
http://www.php.net/manual/en/language.types.string.php#language.types.string.substr
简而言之,花括号只能访问单个字符(如果尝试添加完整字符串,则只返回第一个字符)。此外,它已被弃用,因此我建议避免使用它。substr($xyz[0],0,1)
替换 $xyz[0]{0}
。当你理解了它,它就变得如此简单,但在理解之前非常令人沮丧...谢谢。 - ZZ-bb使用花括号访问数组和字符串偏移量已经从PHP7.4开始被官方弃用。 参考链接:https://www.php.net/manual/en/migration74.deprecated.php