PHP 的引用赋值未按预期工作

2024-01-09

为什么会出现以下情况

class AClass
{
    public function __construct ()
    {
        $this->prop = "Hello";
    }
    public function &get ()
    {
        return $this->prop;
    }
    protected $prop;
}

function func (&$ref)
{
    $ref = &$ref->get();
}

$value = new AClass();
func($value);
var_dump( $value );

outputs

object(AClass)#2 (1) {
  ["prop":protected]=>
  string(5) "Hello"
}

不应该是$value变量成为对的引用$prop并且是类型string而不是停留在类型上AClass?

http://ideone.com/g1hTNV http://ideone.com/g1hTNV


考虑这段代码(它与您的代码相同,只是没有其他任何内容):

$value = new stdClass;
$ref = &$value;
$var = "Hello";
$ref = &$var; // this is where you write $ref = &$ref->get();
var_dump($value);

这给出了正如预期的那样一个空物体和not string(5) Hello.

Why?

我们在4号线覆盖参考$value并参考$var.

$ref现在引用了$var;的价值$value遗迹不受影响.

我们没有做什么

  • 我们不分配值$var to $value.
  • 我们不分配给$value参考$var.

结论

在 PHP 中不可能通过另一个引用变量来分配对变量的引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 的引用赋值未按预期工作 的相关文章