Bug #52589 [Opn->Nab]: com_exception when read array from object->property

From: Date: Mon, 31 May 2021 13:23:23 +0000
Subject: Bug #52589 [Opn->Nab]: com_exception when read array from object->property
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-234111@lists.php.net to get a copy of this message
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)

« previous php.bugs (#234111) next »