変数の作成
変数の作成と値の設定
変数の作成
PHP Manual

## 導入

PHP コアで変数を扱うには、PHP で使われるさまざまな基本概念を身につける必要があります。 まず最初に、PHP は動的で弱い型付けの言語です。 次に、PHP は copy on write 方式と参照カウントを使ってメモリを管理しています。 参照カウント方式と参照の挙動についての詳細は Reference Counting Basics の章を参照ください。

PHP の変数は、二つの部分で構成されています。 シンボルテーブル内でのエントリとして用いられる「ラベル」と、 実際の値を格納する「変数コンテナ」です。ここでは、主に変数コンテナについて扱います。

変数コンテナは実際のコードの中では `zval` と呼ばれ、 変数を処理するために必要なすべてのデータを保持しています。 値そのもののほかにも、現在の型、そのコンテナを指すラベルのカウンタ、 ラベルを参照として扱うかコピーとして扱うかを示すフラグなどが含まれます。 PHP 5.3 では、それに関連する構造体が `Zend/zend.h` で次のように定義されています。

    typedef struct _zval_struct zval;

    typedef union _zvalue_value {
        long lval;                 /* long value */
        double dval;               /* double value */
        struct {                   /* string type */
            char *val;
            int len;
        } str;
        HashTable *ht;             /* hash table value */
        zend_object_value obj;
    } zvalue_value;

    struct _zval_struct {
        /* Variable information */
        zvalue_value value;        /* value */
        zend_uint refcount__gc;
        zend_uchar type;           /* active type */
        zend_uchar is_ref__gc;
    };

`zvalue_value` を見れば、 内部的に使う型やフィールドがその名前とコメントから読み取れるでしょう。 PHP の配列が実際のところはハッシュテーブルであることなどもわかります。 とはいえ、PHP の型のなかでここに登場していないものもあります。 `NULL` や `boolean`、そして `resources` です。 `NULL` については値は不要です。`NULL` がこの型の値となるからです。 `boolean` と `resource` については、PHP が value フィールドを再利用します。 `boolean` 型の場合、`false` なら `0`、`true` なら `1` を保持します。 `resource` 型の場合は、リソース id を保持します。

良いお知らせです。このあたりの事情についての詳しい知識は不要です。 というのも、アクセス用のマクロがきちんと用意されているからです (PHP にはよくあることでず)。 悪いお知らせです。マクロは膨大な数にのぼります。 `zval` をいろいろな方面から使うマクロだけでなく `zval` へのポインタを扱うマクロもあり、さらには `zval` のポインタへのポインタを扱うためのマクロや ポインタの参照先を操作するためのショートカットまで存在します。 これらのマクロが定義されているのは `Zend/zend.h`、 `Zend/zend_operators.h` そして `Zend/zend_API.h` です。

変数の作成
変数の作成と値の設定
変数の作成
PHP Manual