HEREDOC 需要 {} 来打印多维数组值,但在普通数组上不需要。为什么?



在Heredoc编写并发布需要{}的多维数组值时。在普通数组中。这里一个示例:

$array = array('normal_key', 'normal_value');
$multidim = array(array('multi0_key', 'multi0_value'),
                  array('multi1_key', 'multi1_value')
               );          
$text1 =<<<EOBODY
    Hello World!<br />
    $array[0] $array[1]<br />
    $multidim[0][0] $multidim[0][1]<br />
    $multidim[1][0] $multidim[1][1]
EOBODY;
echo $text1;
//This prints:
/* Hello World!
*  normal_key normal_value
*  Array[0] Array[1]
*  Array[0] Array[1] */
$text2 =<<<EOBODY
    Hello World!<br />
    $array[0] $array[1]<br />
    {$multidim[0][0]} {$multidim[0][1]}<br />
    {$multidim[1][0]} {$multidim[1][1]}
EOBODY;
echo $text2;
//This prints:
/*  Hello World!
*   normal_key normal_value
*   multi0_key multi0_value
*   multi1_key multi1_value */

为什么?

正常。这是PHP解析器"错误" - 在字符串中寻找阵列时并不贪婪:

$arr[1][2] = 'foo';
echo "$arr[1][2]";   non-greedy
echo $arr[1][2];  greedy, outputs 'foo'

被解析为

echo $arr[1], "[2]";
     ^^^^^^^--array
              ^^^^--string
output: Array[2]

在字符串上下文中呼应数组将始终输出字面的单词 Array,而不是数组的内容。

使用{}符号强制PHP在整个数组中吸吮:

echo "{$arr[1][2]}"; // outpus "foo";

"错误"适用于普通""引用的字符串和Heredocs。

相关内容

  • 没有找到相关文章

最新更新