php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #52589 com_exception when read array from object->property
Submitted: 2010-08-12 08:52 UTC Modified: 2021-05-31 13:23 UTC
From: stinger25 at yandex dot ru Assigned: cmb (profile)
Status: Not a bug Package: COM related
PHP Version: 5.3.3 OS: WinXP
Private report: No CVE-ID: None
 [2010-08-12 08:52 UTC] 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

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-08-12 09:08 UTC] 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-09-02 06:59 UTC] 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.
 [2021-05-31 13:23 UTC] cmb@php.net
-Status: Open +Status: Not a bug -Assigned To: +Assigned To: cmb
 [2021-05-31 13:23 UTC] cmb@php.net
Indeed, accessing array properties is not supported; instead they
should be accessed as methods.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 11:01:30 2024 UTC