【问题标题】:Can someone explain this php type-juggling?有人可以解释这个 php type-juggling 吗?
【发布时间】:2014-03-07 12:29:17
【问题描述】:

我尝试了以下代码是否有效,并且确实有效:

// 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,并且必须将其转换为字符串。

我说的对吗?错误的?有人能解释一下这里的“幕后”发生了什么吗?

【问题讨论】:

    标签: php type-conversion


    【解决方案1】:

    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"
    */
    

    【讨论】:

    • 你证实了我的想法。我并不是真的“困惑”,我只是有点好奇是什么让这种类型杂耍成为可能。谢谢顺便说一句:)
    • Php 变量本身并没有像其他语言那样附加任何类型信息,而是它们指向的对象
    猜你喜欢
    • 1970-01-01
    • 2015-10-28
    • 2013-01-09
    • 2012-04-19
    • 2021-01-06
    • 1970-01-01
    • 2013-02-27
    • 2011-01-16
    • 2011-03-17
    相关资源
    最近更新 更多