更改变量作为对象方法PHP的引用返回

时间:2017-01-15 13:04:08

标签: php oop pointers object reference

我想覆盖作为引用返回的数组元素。我可以这样做:

$tmp = $this->event_users_details;
$tmp = &$tmp->firstValue("surcharge");
$tmp += $debt_amount;

我会在一行中这样做:

$this->event_users_details->firstValue("surcharge") += $debt_amount;

但我得到Can't use method return value in write context

其中$this->event_users_details是在构造函数中注入的对象。 我的功能如下:

public function & firstValue(string $property) {
    return $this->first()->{$property};
}

public function first() : EventUserDetails {
    return reset($this->users);
}

users是私有数组。

1 个答案:

答案 0 :(得分:1)

如果没有临时变量商店的“附加费”价值,你就无法做到。

From documentation:

要从函数返回引用,请使用引用运算符&在函数声明和将返回值分配给变量时:

<?php
function &returns_reference()
{
    return $someref;
}

$newref =& returns_reference();
?>

我用这段代码检查了它:

class Item
{
    public $foo = 0;
}

class Container
{
    private $arr = [];

    public function __construct()
    {
        $this->arr = [new Item()];
    }

    public function &firstValue($propNme)
    {
        return $this->first()->{$propNme};
    }

    private function first()
    {
        return reset($this->arr);
    }
}

$container = new Container();
var_dump($value = &$container->firstValue('foo')); // 0
$value += 1;
var_dump($container->firstValue('foo')); // 1