0

我对以下输出感到困惑

class A{
    public $v = 10;    
    function add($number){
        $this->v +=$number;
    }

}
$a = new A;
echo $a->v . "\n";
$a->add(5);
echo $a->v . "\n";

为什么第二行输出的是 15 而不是 10?我认为除非您通过引用传递,否则对函数内部值所做的更改不会传播到函数外部。

4

2 回答 2

5

您的评论“对函数内部值所做的更改不会在函数外部传播”适用于参数。可以“按值”或“按引用”传递,例如:

class A{
    public $v = 10;    
    function add($number){
        $number += $this->v;
    }

$b = 5;
$a->add($b);
echo $b; // Will still be 5;

在上面的示例中,$b 只有在通过引用传递给函数时才会变为 15。

在您的情况下,您根本没有修改参数。您也没有修改局部变量。

您正在修改v对象的属性。$this是一个特殊变量,它是函数的局部变量,但引用了对象。您修改的实际变量不是$this,也不是参数,而是 的属性$a

于 2013-01-17T06:13:49.127 回答
-2

但是你通过引用传递它。当您使用关键字$this时,您已经表明应该使用类属性。

于 2013-01-17T06:14:20.017 回答