有人可以解释这种PHP类型 - 玩杂耍吗?

时间:2014-03-07 12:29:17

标签: php type-conversion

如果下面的代码有效,我试过了,它确实:

// Lets create and fill a new array
$variable[] = 'value 1';
$variable[] = 'value 2';
$variable[] = 'value 3';

// Implode it, and save it to a a string
$variable   = 'values: ' . implode(', ', $variable);

当它还是一个数组时,为什么它能够将字符串存储在$ variable中?

认为这是发生的事情: 它在内存中创建新值(因此它是新的数据类型),然后将其保存到$ variable,并且必须将其转换为字符串。< / p>

我是对的吗?错误?有人可以解释在幕后发生的事情&#39;这里吗?

1 个答案:

答案 0 :(得分:2)

PHP是一种松散类型的语言,因此它并不关心变量的类型。当您使用[]语法推送新元素时,$variable会自动成为一个数组。在前三个语句之后,$variable将是一个包含三个值的一维数组,即value 1value 2value 3

然后,在下一个语句中,您将内爆结果存储在字符串中。我猜你因为变量名相同而感到困惑。在此,重要的是要注意implode(', ', $variable)是评估第一的内容。结果是一个字符串,然后与字符串values:连接,然后存储回$variable(覆盖之前的数组)。

以下是发生的事情:

// $variable isn't defined at this point (yet)
$variable[] = 'value 1';
$variable[] = 'value 2';
$variable[] = 'value 3';

/*
print_r($variable);
Array
(
    [0] => value 1
    [1] => value 2
    [2] => value 3
)
*/

$imploded = implode(', ', $variable);
/*
var_dump($imploded);
string(25) "value 1, value 2, value 3"
*/    

$variable   = 'values: ' . $imploded;
/*
var_dump($variable);
string(33) "values: value 1, value 2, value 3"
*/