2024 年 PHP 日本研討會

com_print_typeinfo

(PHP 4 >= 4.2.0,PHP 5,PHP 7,PHP 8)

com_print_typeinfo印出可分派介面的 PHP 類別定義

描述

com_print_typeinfo(variant|string $variant, ?string $dispatch_interface = null, bool $display_sink = false): bool

這個函數的目的是協助產生一個骨架類別,以用作事件接收器。您也可以使用它來產生任何 COM 物件的傾印,前提是它支援足夠的內省介面,並且您知道要顯示的介面的名稱。

參數

variant

variant 應為 COM 物件的實例,或是類型程式庫的名稱(將根據 com_load_typelib() 中設定的規則解析)。

dispatch_interface

您要顯示的 IDispatch 後代介面的名稱。

display_sink

如果設為 true,則會顯示對應的接收器介面。

回傳值

成功時回傳 true,失敗時回傳 false

另請參閱

新增註解

使用者貢獻的註解 2 則註解

2
csaba at alum dot mit dot edu
19 年前
如果您嘗試找出您可以存取的屬性和方法,com_print_typeinfo 真的很有用。例如,我可以執行

<?php
$oExplorer
= new COM("Shell.Application");
com_print_typeinfo($oExplorer);
?>

第一行顯示物件的類別(VBScript 所謂的「typename」),在我的例子中是 IShellDispatch4。通常,如果您將其作為 com_print_typeinfo 的第二個參數插入,您會得到更多的方法/屬性。因此

<?php
$oExplorer
= new COM("Shell.Application");
com_print_typeinfo($oExplorer, "IShellDispatch4");
?>

此外,如果您嘗試使用較低的數字後綴(或不使用),您可能會得到額外的函數列表。無論如何,如果 PHP 有一個像 VBScript 那樣的 typename 函數會很有用。例如,如果您遍歷 $oExplorer 的視窗,您會同時獲得 IE 和 Explorer 視窗,而 typename 是區分它們的簡單方法。以下是我正在使用的

<?php
函式 typeName($objCOM) {
if (empty(
$objCOM)) return "沒有 COM 物件";
if (
gettype($objCOM)!="object") return "不是 COM 物件";
ob_start();
com_print_typeinfo($objCOM);
$typeInfo = ob_get_contents();
ob_end_clean();
$pattern = "/^\\s*class (.*) \\{/";
if (!(
$matchCnt = preg_match($pattern, $typeInfo, $aMatch))) return "找不到";
return
$aMatch[1];
}
?>

來自維也納的 Csaba Gabor
-1
Richard Lynch
18 年前
在我使用的特定 PHP 版本中,第二個和第三個參數實際上並非選用。

然而,將兩個參數都傳入 '' 卻產生了大量資訊。

結果可能依您的環境而異 (YMMV)
To Top