如果您嘗試找出您可以存取的屬性和方法,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