COM クラス
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
説明
COM クラスにより、OLE 互換の COM オブジェクトのインスタンスを作成し、 そのメソッドをコールしたりそのプロパティにアクセスしたりすることが 可能となります。
$obj = new COM("Application.ID")
メソッド
$module_name
[, mixed $server_name
[, int $codepage
[, string $typelib
]]] )COM クラスのコンストラクタ。 パラメータには以下のような意味があります。
- module_name
- ロードするコンポーネントを指定する プログラム ID、クラス ID またはモニカです。 プログラムID は、通常、アプリケーションまたは DLL の名前の後に、 Word.Application のようにピリオドと オブジェクト名を付けたものです。 クラス ID は、指定されたクラスがユニークに定義する UUID です。 モニカは、URL スキームの考え方に似た特別な命名形式です。リソースと、 それがどのように読み込まれるかを指定します。例として、モジュール名に Word ドキュメントのフルパスを指定すると、Word を読み込んで ドキュメントに対応するオブジェクトを取得することができます。 あるいは、LDAP への ADSI インターフェイスを指すモニカとして LDAP: を使用することが可能です。
- server_name
-
コンポーネントが読み込んで実行される DCOM サーバーの名前です。
NULLの場合、オブジェクトはアプリケーションのデフォルトを 指定して実行されます。典型的なデフォルトは、ローカルマシン上で 実行させることでが、管理者によってはアプリケーションを別の マシン上で実行させるように設定しているかもしれません。 非NULL値をサーバーに指定した場合、 設定オプションがTRUEに設定されていない限り PHP はオブジェクトの読み込みを 拒否します。server_nameが配列の場合、以下の要素 (大文字小文字を区別します!)を含まなければなりません。 これらはすべて省略可能であることに注意しましょう (とはいえ、Username および Password は両方指定する必要があります)。 もしサーバー設定を省略した場合は(上で説明した)デフォルトのサーバーが 使用され、オブジェクトの生成は ディレクティブの影響を受けません。DCOM サーバー名 server_nameのキー型 説明 Server string サーバーの名前。 Username string 接続するユーザー名。 Password string Usernameに対するパスワード。Flags integer 以下の定数のうちのひとつまたは複数の論理和。 CLSCTX_INPROC_SERVER、CLSCTX_INPROC_HANDLER、CLSCTX_LOCAL_SERVER、CLSCTX_REMOTE_SERVER、CLSCTX_SERVERおよびCLSCTX_ALL。指定されていない場合の デフォルト値は、Serverを省略した場合がCLSCTX_SERVERでサーバー名を指定した場合はCLSCTX_REMOTE_SERVERです。 これらの定数の意味についての詳細な情報を得るには、Microsoft のドキュメントで CoCreateInstance について調べましょう。 通常はこれらを使用する必要はないはずです。 - codepage
-
文字列と Unicode 文字列との相互変換に使用するコードページを指定します。
PHP の文字列と COM オブジェクトのメソッドとの受け渡しの際には、いつも
変換が行われます。コードページの扱いは面倒です。というのは、
オブジェクトだけではなくオブジェクトから返される variant にもそれが
影響するからです。
とりうる値は
CP_ACP(システムのデフォルト ANSI コードページを使用する - このパラメータが指定されなかった場合の デフォルト)、CP_MACCP、CP_OEMCP、CP_SYMBOL、CP_THREAD_ACP(現在実行中のスレッドの コードページ/ロケールを使用する)、CP_UTF7およびCP_UTF8です。コードページに対応する 数値を指定することも可能です。コードページとそれに対応する数値に ついての詳細は、Microsoft のドキュメントを参照ください。
オーバーロードされたメソッド
返されるオブジェクトは、オーバーロードされたものです。つまり、 PHP 側では通常のクラスのメソッドは見えないということです。 その代わりに、プロパティやメソッドへのアクセスは COM を通じて行います。
参照渡しのパラメータを受け付けるメソッドを PHP が 自動検出するようになりました。それらのメソッドについては、PHP が自動的に 変数を参照渡し形式に変換します。つまり、メソッドのコールをより自然に 行えるということです。コードの中で特別な処理をする必要はありません。
COM の例
例1 COM の例 (1)
<?php
// word を起動します
$word = new COM("word.application") or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}\n";
// 前面に移動させます
$word->Visible = 1;
// 空のドキュメントを開きます
$word->Documents->Add();
// 何か複雑なことを行います
$word->Selection->TypeText("This is a test...");
$word->Documents[1]->SaveAs("Useless test.doc");
// word を閉じます
$word->Quit();
// オブジェクトを開放します
$word = null;
?>
例2 COM の例 (2)
<?php
$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$conn->Open("Provider=SQLOLEDB; Data Source=localhost;
Initial Catalog=database; User ID=user; Password=password");
$rs = $conn->Execute("SELECT * FROM sometable"); // レコードセット
$num_columns = $rs->Fields->Count();
echo $num_columns . "\n";
for ($i=0; $i < $num_columns; $i++) {
$fld[$i] = $rs->Fields($i);
}
$rowcount = 0;
while (!$rs->EOF) {
for ($i=0; $i < $num_columns; $i++) {
echo $fld[$i]->value . "\t";
}
echo "\n";
$rowcount++; // 行カウントの加算
$rs->MoveNext();
}
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;
?>