string - PHP中的数组歧义

时间:2012-05-06 01:34:49

标签: php arrays string

我朦胧地回忆起,从我对PHP文档(超过10年前)的第一次阅读中,访问数组($string[0])中的字符的类似数组的语法带来了一些含糊不清或未定义的行为。

O'Reilly PHP Pocket Reference(第2版)声明:

  

解决字符串和数组之间的歧义问题,a   引入了新语法来取消引用单个字符   来自字符串:

     

$string{2}

     

此语法相当于$string[2],最好。

我理解$string[2]可能会让人感到困惑,但我不确定它是多么含糊不清?

此外:我想知道the new syntax $string{2}如何消除模糊/混淆,因为花括号(apparently)也适用于“真实”数组。

3 个答案:

答案 0 :(得分:6)

唯一不明确的是,如果您期望一个数组,但实际上有一个字符串,$var[0]将为您提供字符串的第一个字节而不是第一个数组元素。这可能导致很多人头疼,并想知道为什么PHP只给你第一个字符而不是整个数组元素。对于像$var['foo']这样的非数字索引更是如此,如果$var是一个字符串,它实际上是有效的(是的,请不要问)。即如果您的程序首先出错,可能会使调试变得更加困难。

正确的程序没有歧义,因为变量不能同时是字符串和数组。

答案 1 :(得分:2)

由于引用的发布日期之后的5.4中的更改已删除了由字符串偏移和数组偏移之间的模糊性引起的许多问题。 http://php.net/manual/en/migration54.incompatible.php

出于这个原因,我会在新代码中推荐[]来获取字符串偏移量。

答案 2 :(得分:1)

好吧,我用这段代码测试了一些变量:

<pre><?php 

dumpling(array("php"));
dumpling(array());
dumpling(0);
dumpling(1);
dumpling(TRUE);
dumpling(FALSE);
dumpling(NULL);
dumpling("php");

function dumpling($var){
    var_dump($var[0]);
    var_dump($var{0});
}

?>

这两者之间似乎没有任何区别。

输出结果为:

string(3) "php"
string(3) "php"
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
string(1) "p"
string(1) "p"