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
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
-1
Richard Lynch
17 年前
在我的 PHP 版本中,第二个和第三个参数实际上不是可选的。

但是,对于两者都传递 '',却产生了大量信息。

可能因人而异
To Top