Bug #52589 [Opn->Nab]: com_exception when read array from object->property
Edit report at https://bugs.php.net/bug.php?id=52589&edit=1
ID: 52589
Updated by: cmb@php.net
Reported by: stinger25 at yandex dot ru
Summary: com_exception when read array from object->property
-Status: Open
+Status: Not a bug
Type: Bug
Package: COM related
Operating System: WinXP
PHP Version: 5.3.3
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Indeed, accessing array properties is not supported; instead they
should be accessed as methods.
Previous Comments:
------------------------------------------------------------------------
[2010-09-02 06:59:54] bastard dot internets at gmail dot com
"ÐаÑамеÑÑ ÑвлÑеÑÑÑ
обÑзаÑелÑнÑм" = "The parameter is mandatory"
I'm assuming. You appear to have Text() return as a single string, meaning it won't
behave like an array as you have "$str = $obj->Text[$i];" implying. Try "$str =
$obj->Text($i);" instead.
------------------------------------------------------------------------
[2010-08-12 09:08:13] stinger25 at yandex dot ru
It's working if instead property write method.
VB6 Code
Public Function ReadText(index) As String
Dim ret As String
ReDim str_Text(3)
str_Text(0) = "Test zero string"
str_Text(1) = "Test first string"
str_Text(2) = "Test second string"
If ((index < 0) Or (index >= 3)) Then
ret = ""
Else
ret = str_Text(index)
End If
ReadText = ret
End Function
and in PHP page
<?php
$obj = new COM('TestCOM.Class1') or die('COM init failed.');
$j = $obj->Count;
print $j."<br>";
for ($i=0; $i<$j; $i++)
{
// $str = $obj->Text[$i];
$str = $obj->ReadText($i);
print $str."<br>" ;
}
?>
Actual result:
3
Test zero string
Test first string
Test second string
------------------------------------------------------------------------
[2010-08-12 08:52:30] stinger25 at yandex dot ru
Description:
------------
I have small test ActiveX DLL writen in VB6.
It is code of DLL:
Option Explicit
Private str_Text() As String
Public Property Get Text(index As Integer) As String
ReDim str_Text(3)
str_Text(0) = "Test zero string"
str_Text(1) = "Test first string"
str_Text(2) = "Test second string"
If ((index < 0) Or (index >= 3)) Then
Text = ""
Else
Text = str_Text(index)
End If
End Property
Public Property Get Count() As Long
Count = 3
End Property
When I trying read array from Text property PHP page generate error, but in VB6
it's working correct.
Test script:
---------------
<?php
$obj = new COM('TestCOM.Class1') or die('COM init failed.');
$j = $obj->Count;
print $j."<br>";
for ($i=0; $i<$j; $i++)
{
$str = $obj->Text[$i];
print $str."<br>" ;
}
?>
Expected result:
----------------
3
Test zero string
Test first string
Test second string
Actual result:
--------------
3
Fatal error: Uncaught exception 'com_exception' with message 'Error [0x8002000f]
ÐаÑамеÑÑ ÑвлÑеÑÑÑ
обÑзаÑелÑнÑм. ' in
C:\Inetpub\_web_script_\SKU_Buffer\docsgenerator\xls.php:8 Stack trace: #0
C:\Inetpub\_web_script_\SKU_Buffer\docsgenerator\xls.php(8): unknown() #1 {main}
thrown in C:\Inetpub\_web_script_\SKU_Buffer\docsgenerator\xls.php on line 8
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=52589&edit=1
Thread (4 messages)