1

この例を見てください。私はこのような行動に気づきませんでした:

class foo
{
    public $foo = 0;

    public function addFoo()
    {
        $this->foo = $this->foo + 1;

        return $this;
    }
}

$bar = new foo;

$a = $bar;
$b = $bar->addFoo();
$c = $bar->addFoo();

スクリプトが完了した後、次のように想定しました。

$a->foo は: 0

$b->foo は: 1

$c->foo は: 2

しかし、そうではありません。私は得る:

$a->foo は: 2

$b->foo は: 2

$c->foo は: 2

$a->foo が 2 である理由がわかりません。これはポインターではなく、変更されることはありません。

おそらく誰かが、これがカバーされている PHP のドキュメントへのリンクを説明したり、表示したりできます。

ありがとうございました。

4

3 に答える 3

0

あなたがしていることはこれです

$bar = new foo();

$a = $bar;

$b = $bar->addFoo();
$c = $bar->addFoo();
echo $a->foo;
echo  $b->foo;
echo  $c->foo;

o/p = 2, 2, 2

すべての追加操作が完了した後、クラスの $foo(つまり $this) 変数の最後の値を返すため、これは常に 2 を返します。

あなたが望むものを得るためにこれを試してください

$bar = new foo();

$a = $bar;
echo $a->foo;

$b = $bar->addFoo();
echo  $b->foo;

$c = $bar->addFoo();
echo  $c->foo;

 o/p = 0, 1, 2

これにより、各追加操作の後に $foo の値が出力されるため、0、1、2 の出力が得られます。

したがって、要約すると、 addFoo() 関数はクラス オブジェクトを返します。そのため、前のケースではクラス オブジェクトが $foo の値を保持していたため、その addFoo() を再度呼び出すと、$foo 変数に + 1 が追加されます。したがって、クラスの同じオブジェクトを保持するすべての変数。

于 2013-05-15T12:10:25.763 に答える