PHP Conference Japan 2024

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 条注释

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
Richard Lynch
18 年前
在我的特定版本的 PHP 中,第二个和第三个参数实际上并非可选。

但是,对两者都传入 '' 会产生大量信息。

您的里程可能会有所不同
To Top