DOTNET
com_addref
COM関数
PHP Manual

# VARIANT

(PHP 4 >= 4.1.0, PHP 5)

VARIANT — VARIANT クラス

    $vVar = new VARIANT($var)

### 説明

VARIANT は、PHP の zval と同等の COM の値です。構造体形式になっており、 異なる型の値を含めることが可能です。COM 拡張モジュールが提供する VARIANT クラスによって、PHP と COM の間のデータの受け渡しを制御できるように なります。

### メソッド

object VARIANT::VARIANT ([ mixed `$value` [, int `$type` [, int `$codepage` ]]] )

VARIANT クラスのコンストラクタ。パラメータは以下のとおりです。

value
  初期値。省略したり `NULL` を設定した場合には、VT_EMPTY オブジェクトが作成されます。
type
  VARIANT オブジェクトの content 型を指定します。使用可能な値は、 `VT_XXX` 定義済み定数 のうちのひとつです。 PHP 5 より前のバージョンでは、`type` に `VT_BYREF` を加えることで PHP から variant オブジェクトに参照渡しをさせることが可能でした。PHP 5 では、 この方法はサポートされていません。そのかわりに、PHP 5 では パラメータが参照渡しされた場合にそれを自動的に認識します。 VARIANT オブジェクトとして渡す必要さえありません。 VARIANT 型についてのその他の情報については、MSDN ライブラリを参照ください。
codepage
  文字列を unicode に変換する際に使用するコードページを指定します。 詳細な情報については、 COM クラスの同名のパラメータを参照ください。

PHP 5 より前のバージョンでは、VARIANT クラスのインスタンスには 多くの(ドキュメント化されていない)仮想プロパティが存在します。 これらのプロパティは PHP 5 ですべて削除され、かわりにより自然な構文で アクセスできるようになっています。これらの違いについて、以下の例で 説明します。

例1 PHP 4.x 形式 での Variant の例

`<?php
$v = new VARIANT(42);
print "The type is " . $v->type . "<br/>";
print "The value is " . $v->value . "<br/>";
?>`

例2 PHP 5 形式での Variant の例

`<?php
$v = new VARIANT(42);
print "The type is " . variant_get_type($v) . "<br/>";
print "The value is " . $v . "<br/>";
?>`

このように変更された理由は、内部的には、COM 拡張モジュールが VARIANT、COM および DOTNET クラスを同一のものとして扱い、これらの クラスのプロパティやメンバへのアクセスは(何のインターフェースも 経由せず)直接 COM とやり取りを行うようにするという設計思想によるものです。 新しい構文は、より自然でより手軽です。また、削除された仮想プロパティの ほとんどは、PHP のコンテキストにおいては何の意味も持たないものでした。

> 注意: PHP 5 では、VARIANT を扱うためのよりシンプルな手段をとっています。 値を返したり variant プロパティを取得したりする際に variant が PHP の値に変換されるのは、情報を失うことなく型変換ができる型が 存在する場合に限られます。それ以外の場合は、結果は VARIANT クラスの インスタンスとして返されます。明示的にキャスト演算子を指定することで variant を PHP のネイティブ型として扱うことが可能です。また、 print() を使用すると、暗黙のうちに値が文字列に 変換されます。variant に対する計算のためのさまざまな関数が用意されており、 型変換でデータを失うリスクを犯さなくてもそのままの形式で計算を 行うことが可能です。

variant_get_type() も参照ください。

DOTNET
com_addref
COM関数
PHP Manual