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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: stinger25 at yandex dot ru
New email:
PHP Version: OS:

 

 [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 13:01:31 2024 UTC