我对以下输出感到困惑
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";
Run Code Online (Sandbox Code Playgroud)
为什么第二行输出15而不是10?我认为对函数内部的值所做的更改不会传播到函数之外,除非您通过引用传递.
您的评论"对函数内部的值所做的更改不会在函数之外传播"用于参数.例如,可以通过'值'或'通过引用'传递:
class A{
public $v = 10;
function add($number){
$number += $this->v;
}
$b = 5;
$a->add($b);
echo $b; // Will still be 5;
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,只有通过引用函数传递$ b才会变为15.
在您的情况下,您根本不会修改参数.你也没有修改局部变量.
您正在修改v对象的属性.$this是一个特殊变量,它是函数的本地变量,但引用该对象.您修改的实际变量不是$this,也不是参数,而是属性$a.
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |