0

このコードを試してみると:

<?php

class ref
{

    public $reff = "original ";

    public function &get_reff()
    {
        return $this->reff;
    }

    public function get_reff2()
    {
        return $this->reff;
    }
}

$thereffc = new ref;

$aa =& $thereffc->get_reff();

echo $aa;

$aa = " the changed value ";
echo $thereffc->get_reff(); // says "the changed value "
echo $thereffc->reff; // same thing
?>

次に、参照による戻りが機能し、それを参照$reffする変数も変更されると、オブジェクト プロパティの値が変更され$aaます。

しかし、クラス内ではない通常の関数でこれを試してみると、うまくいきません!!

私はこのコードを試しました:

<?php

function &foo()
{
    $param = " the first <br>";
    return $param;
}

$a = & foo();

$a = " the second <br>";

echo foo(); // just says "the first" !!!

foo()関数が参照によって返されることを認識せず、頑固に必要なものを返すように見えます!!!

参照による戻りは、OOP コンテキストでのみ機能しますか??

4

2 に答える 2

0

参照による戻りは、OOP コンテキストでのみ機能しますか??

いいえ。PHP はそれが関数であろうとクラス メソッドであろうと違いはありません。参照による戻りは常に機能します。

あなたが尋ねるということは、PHP の参照が何であるかを完全に理解していない可能性があることを示しています。PHP マニュアルのトピック全体と、別の著者による少なくとも 2 つのソースを読むことをお勧めします。複雑なトピックです。

あなたの例では、ここで返す参照に注意してください。関数を呼び出すときに常にその値に設定$paramするため、関数は新しく設定された変数への参照を返します。

したがって、これはここで尋ねる変数スコープの問題です。

于 2013-07-30T16:51:05.880 に答える