为什么修改函数内部的$ this会在函数外部传播?

时间:2013-01-17 06:11:32

标签: php object

我对以下输出感到困惑

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?我认为对函数内部的值所做的更改不会传播到函数之外,除非您通过引用传递。

2 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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

答案 1 :(得分:-2)

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