タグ

refに関するlamichのブックマーク (2)

  • phpではarrayは参照型ではないのでしょうか?ある関数にarrayの変数を渡し、関数内で変数に何かを代入して、関数を抜けた後、a... - Yahoo!知恵袋

    php_de_it_dokataさんが良いこと書いてくれてますのでちょっと補足します。 「引数」に「&」をつけた場合の挙動に関しては、php_de_it_dokataさんの回答の通りです。 >> 内部関数に渡された配列は、多くは値渡しの動きをするが、sort()やshuffle()やparse_str()等、参照渡しの動きをするものもあるのがPHPクオリティ。 慣れるまではマニュアルをチェックするようにし、その関数に渡される配列が「$arr」で定義されているか「&$arr」で定義されているか確認するようにしましょう。 シンボルテーブルについて http://php.net/manual/ja/features.gc.refcounting-basics.php 配列の「要素」を参照渡しにした場合の挙動にご注意ください。 (これもかなりPHPの気持ち悪いところではありますが) $a = 'a

    phpではarrayは参照型ではないのでしょうか?ある関数にarrayの変数を渡し、関数内で変数に何かを代入して、関数を抜けた後、a... - Yahoo!知恵袋
  • PHP: リファレンスカウントの原理 - Manual

    リファレンスカウントの原理 PHP 変数は「zval」と呼ばれるコンテナに保管されます。 zval コンテナには、変数の型と値の他に、情報の追加ビットを2つ含みます。 1つ目は「is_ref」と呼ばれ、変数が「参照集合」の一部かどうかを示すブール値 です。 このビットによって、通常の変数と参照を区別する方法を PHP エンジンが知ります。 &演算子によって作成されるように、PHP ではユーザーランドで参照を使えるので、 zval コンテナもメモリー使用状況を最適化するための内部的なリファレンスカウント機構を 持ちます。 追加情報の2つ目は「refcount」と呼ばれ、この1つの zval コンテナをどれだけ多くの 変数名(シンボルとも呼ばれます)が指すかを含みます。 シンボルは全てシンボルテーブルに保管され、スコープごとにシンボルテーブルの 1つがあります。 関数やメソッドごとのスコープば

    PHP: リファレンスカウントの原理 - Manual
  • 1