0

PHP 変数参照について読みましたが、100% ではなく、誰かが助けてくれることを望んでいました。

次のようなクラスがあるとします。

class Item
{
    public $value;
}

次に、これらのアイテムの配列を変数に入れます。それを $items と呼びましょう。私がしたのは new Item()... と $items[] = $newItem; だけでした。

ここで、別の配列にデータを入力したいのですが、その値に基づいて元の配列をフィルター処理します。次のように:

foreach($items as $key => $value)
{
    $filteredItems[] = &value;
}

今、私はそのフィルタリングされたリストを反復処理し、次のようなことをする別の変数を持っています:

$theItem = $filteredItems[10];
$theItem->value = 100;

今、これは私が混乱しているところです。(参照)に設定$theItemする必要があり&filteredItems[10];ますか?それとも、配列内の値が参照型であり、$theItem も同じ項目への参照になることがわかっているだけですか? 最後の一連の変更の後、リスト$theItem->value = 100;に保存されている非常に元のオブジェクトです。$items

4

2 に答える 2

4

PHP 5 では、適切な言葉がないため、オブジェクトは常に「ハンドル」によって渡されます。これは、次のことを意味します。

$a = new Item();
$a->value = 1;

$b = $a;
$b->value++;

echo $a->value;

2 の値がエコーされます。なんで?オブジェクトのハンドルがからコピーされ$a$b両方が同じオブジェクトを指しているためです。これは を使用するという観点からの参照ではありませんが、&人々が一般的に同じものと呼ぶほど十分に同様に動作します...そうではないにもかかわらず.

したがって、コード内で参照を使用する必要はありません。通常、PHP では、オブジェクトを使用するときに参照を使用する必要はありません。

オブジェクトに関しては、これを行う (変数自体に新しい値を割り当てる) 場合にのみ、参照に気付くだけです。

function foo(Item &$a)
{
  $a = null;
}

$b = new Item();
foo($b);
var_dump($b);

これはNULL、参照がなければ発生しない結果になります。繰り返しますが、これは一般的な使用法ではないため、オブジェクトで参照を使用することを本当に忘れることができます。

(そしてもちろん、要点を説明するためにここで関数を使用する必要はありませんが、それは「現実の世界」で関数を目にする最も典型的な場所です。)

于 2013-08-11T21:22:37.920 に答える