字符串

看了一遍文档,好像发现了不一样的东西。

主要是复杂花括号语法。

双引号中可以解析变量,虽然可以不加花括号,但是还是建议加一下。加了花括号之后,不仅可以解析变量,还可以解析一些复杂的东西。

在双引号的字符串中,{必须和$挨在一起才会起效果,这样就理所当然地不需要\去转义{了。那么如果需要输出{$或者${时该怎么办呢,在转义$即可。

铺了个垫,接下来进入正题。

简单的变量解析

上面说过了,在双引号中,可以直接解析变量,可是如果直接写的话,就会出现很多问题。

<?php
$juice = "apple";

echo "He drank some $juice juice.";

echo "He drank some juice made by $juices.";

上面两个例子,对于第一个,可以正常输出He drank some apple juice.,因为$juice被解析成了变量。但是第二个却不能正确输出,He drank some juice made by .

这是为啥呢。在双引号里解析的变量,会尽可能地去拼凑成完整的合法的变量名。上面由于$juice右边紧挨着的是一个s,它们组合在一起可以组成一个合法的变量名,而后面的.却不是合法的变量名称。因此,第二句的变量名会变成$juices而不是$juice。但是$juices并没有被定义,因此会输出null

双引号里是不接受'作为数组的字符串索引的。那么需要用数组的时候就可以去掉'

<?php
$juices = ['koolaid1' => 'apple'];

echo "He drank some $juices[koolaid1] juice.";

这样就可以在字符串中使用字符串索引的数组了。

复杂的变量解析

这里是真·正题╮(╯_╰)╭

对于前面双引号里简单的变量解析,还是多用个花括号使用复杂的变量解析。这里复杂的变量解析并不是说这种方法有多么复杂,是它可以使用许多发复杂的表达式。

在复杂的变量解析中,{$一定要紧挨在一起。

例子

<?php
$great = 'fantasting';

echo "This is { $great}";

echo "This is {$great}";
echo "This is ${great}";

上面的三个语句中,第一个,因为{$中间隔了一个空格,所以不能作为复杂的变量解析,只能按照简单的变量解析来解析变量,会输出This is { fantasting}。而第二、三的语句,{$不管是谁在前谁在后,因为紧挨在一起,所以能够按照复杂的变量解析来解析变量。故输出This is fantasting。同理可得对象和数组。

同时呢,{$可以多层嵌套。就像变量一样。

<?php
$juice = 'apple';

function getJuice()
{
    return 'juice';
}

echo "He drank some {${getName()}} juice.";

这里输出的便是`He drank some apple juice.“。函数如此,类亦是如此。