PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » HTML » HTML_QuickForm » Bug #400

Element object cannot be passed by reference from one user method to another

Details

Submitted2003-12-10 20:23 UTC
Fromate2 at cornell dot edu
Assignedmansion
StatusClosed
PackageHTML_QuickForm
PHP Version4.3.3
OSRedHat Linux 7.3
Roadmaps(Not assigned)

Comments

[2003-12-10 20:23 UTC] ate2 at cornell dot edu

Description:
------------
The following script requires DB_DataObject package as well.
My goal was to make a base class with a method that behaves like HTML_QuickForm::addElement() but also does some other things to make sure the created element is properly associated with the DataObject property to which it pertains. This class would then be extended to a series of child classes, each corresponding to a data table (documented feature of DB_DataObject package).
The problem is that the method I have written (_genField) does not pass the reference back to the invoking method (appendForm). Instead it appears to pass a copy of the element object. Consequently, the code runs without error messages, but the invoking method does not change the element in the actual form as desired.
I have not been able to find an explanation for this and am too inexperienced to know whether this is a PHP bug or some sort of problem with these particular two PEAR modules. Any advice would be greatly appreciated.
I have also included my present workaround(commented out), which is to use the HTML_QuickForm::getElement() method to generate a reference from the invoking method. This, however, adds a line of typing for every field I want to add to the form.
PHP configure line:
'./configure' '--with-ldap' '--with-mysql' '--with-apxs=/usr/local/apache/bin/apxs'

Reproduce code:
---------------
http://safc.sas.cornell.edu/test/test_source.txt

Expected result:
----------------
Field should read "I work"

Actual result:
--------------
Field reads "I do not work"

[2003-12-10 20:29 UTC] ate2 at cornell dot edu

I realize that this was not apparent in my original submission and it is quite important:
The problem *only* occurs when class Parent is an extension of DB_DataObject. The code works fine when Parent is not extended from another class. I have not tested to see what happens when other base classes are used.

[2003-12-10 22:10 UTC] ate2 at cornell dot edu

This bug should be closed. Further information in PHP bug 25831 and DB_DataObject bug #172, which includes a solution.
Problem is the result of use of overload() function in DB_DataObject class and it may be prevented by the following line of code:
define('DB_DATAOBJECT_NO_OVERLOAD',true);

[2003-12-11 00:04 UTC] mansion at php dot net

Then I'll close it :)

BTW did you have a look at the DB_DataObject_FormBuilder package ? It might do what you are trying to do.