如果您尝试找出可以访问哪些属性和方法,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
function typeName($objCOM) {
if (empty($objCOM)) return "no COM object";
if (gettype($objCOM)!="object") return "not a COM object";
ob_start();
com_print_typeinfo($objCOM);
$typeInfo = ob_get_contents();
ob_end_clean();
$pattern = "/^\\s*class (.*) \\{/";
if (!($matchCnt = preg_match($pattern, $typeInfo, $aMatch))) return "Not found";
return $aMatch[1];
}
?>
来自维也纳的 Csaba Gabor