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";

2 行目で 10 ではなく 15 が出力されるのはなぜですか? 関数内の値に加えられた変更は、参照渡ししない限り、関数の外には反映されないと思いました。

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 に答える