2009-10-26 41 views
5

Điều gì sẽ là cách thích hợp để phát nổ đối tượng COM để gỡ lỗi? Tôi có một chức năng bên thứ 3 trả về một đối tượng đa cấp. Tài liệu này không tồn tại, vì vậy tôi muốn có khả năng phản hồi mọi thứ ra khỏi đối tượng hoặc gỡ lỗi nó trong Komodo IDE.Khám phá đối tượng COM trong PHP

Komodo chỉ nói Object và không có gì khác. Có thể chuyển đổi thành mảng?

Tôi biết một số tùy chọn hiện có chẳng hạn như $com->Status, nhưng có nhiều biến trở lại mà tôi muốn biết chúng là gì.

+1

Điều gì để var_dump()/print_r() nói? –

+1

'print_r ($ data)' trả về 'biến thể Đối tượng'. 'var_dump' gặp sự cố php vì lý do nào đó. – shaiss

Trả lời

0

Thật lạ khi var_dump không hoạt động.

Nhưng bạn có thể thử với các công cụ phản chiếu khác của php.

Reflection Class:

<?php 
Reflection::export(new ReflectionClass(get_class($data))); 
?> 

Hoặc bạn có thể thử với các get_class_methods:

<?php 
    print_r(get_class_methods($data)); 
?> 

hoặc get_object_vars để xem lĩnh vực của nó:

<?php 
    print_r(get_object_vars($data)); 
?> 

Hope this helps.

+0

phản ánh trả về 'Class [class variant] {- Constants [0] {} - Thuộc tính tĩnh [0] {} - Phương thức tĩnh [0] {} - Thuộc tính [0] {} - Phương thức [0] {}}'. 'print_r (get_class_methods ($ data));' trả về 'Array()'. 'print_r (get_objcet_vars ($ data));' hàm trả về không tìm thấy – shaiss

+0

sử dụng typo: get_object_vars thay vì: get_objcet_vars – elviejo79

+0

không may mắn với điều đó. Cảm ơn thông tin – shaiss

7

Bạn có thể sử dụng com_print_typeinfo() thay vì var_dump(). Điều này sẽ làm việc cho các đối tượng COM, VARIANT và DOTNET. Kết quả trông giống như sau:

 
class IFile { /* GUID={C7C3F5A4-88A3-11D0-ABCB-00A0C90FFFC0} */ 

// some PHP-COM internal stuff ... 

/* DISPID=1610612736 */ 
function QueryInterface(
    /* VT_PTR [26] [in] --> ? [29] */ &$riid, 
    /* VT_PTR [26] [out] --> VT_PTR [26] */ &$ppvObj 
) 
{ 
} 
/* DISPID=1610612737 */ 
/* VT_UI4 [19] */ 
function AddRef(
) 
{ 
} 

// ... 
/* DISPID=1610678275 */ 
function Invoke(
    /* VT_I4 [3] [in] */ $dispidMember, 
    /* VT_PTR [26] [in] --> ? [29] */ &$riid, 
    /* VT_UI4 [19] [in] */ $lcid, 
    /* VT_UI2 [18] [in] */ $wFlags, 
    /* VT_PTR [26] [in] --> ? [29] */ &$pdispparams, 
    /* VT_PTR [26] [out] --> VT_VARIANT [12] */ &$pvarResult, 
    /* VT_PTR [26] [out] --> ? [29] */ &$pexcepinfo, 
    /* VT_PTR [26] [out] --> VT_UINT [23] */ &$puArgErr 
) 
{ 
} 

// properties and methods of the COM object 
// ... 

/* DISPID=1001 */ 
/* VT_BSTR [8] */ 
/* Short name */ 
var $ShortName; 

/* DISPID=1004 */ 
/* VT_PTR [26] */ 
/* Get drive that contains file */ 
var $Drive; 

/* DISPID=1005 */ 
/* VT_PTR [26] */ 
/* Get folder that contains file */ 
var $ParentFolder; 


// ... 

/* DISPID=1204 */ 
function Move(
    /* VT_BSTR [8] [in] */ $Destination 
) 
{ 
    /* Move this file */ 
} 
/* DISPID=1100 */ 
/* VT_PTR [26] */ 
function OpenAsTextStream(
    /* ? [29] [in] */ $IOMode, 
    /* ? [29] [in] */ $Format 
) 
{ 
    /* Open a file as a TextStream */ 
} 
} 
+0

Đây là một chút muộn. Nhưng tôi sẽ kiểm tra lại điều này khi tôi quay lại dự án này ngay. – shaiss

+0

Hãy cẩn thận! 'com_print_typeinfo' có thể thực hiện kiểm tra lỗi Apache của bạn! –

0

Bản gốc var_dump() không bị lỗi đối với các đối tượng COM.

Phần mở rộng xdebug, thay thế hàm var_debug() gốc và không hỗ trợ đối tượng COM.

Giải pháp sẽ là hủy kích hoạt ghi đè hàm var_dump() bằng xdebug bằng cách thêm xdebug.overload_var_dump = off vào php.ini.

Lỗi liên quan trong xdebug bug tracker

Các vấn đề liên quan