ID:               29070
 Comment by:       ilia at manual dot ru
 Reported By:      csmoak at andrew dot cmu dot edu
 Status:           Open
 Bug Type:         Feature/Change Request
 Operating System: All
 PHP Version:      5.0.0RC3
 New Comment:

This is a really annoying issue. I actually was frustrated by it when
the whole system was already ready 'on paper'.


You can set a border of e.g 1000 calls to catch the infinite recursion,
if you wish but one shouldn't catch programmer's hand - let him have the
recursion if he wants to!

The current behaviour is USELESS, while allowing recursive calls is
HELPFUL.

This seems quite a reason to fix that..


Previous Comments:
------------------------------------------------------------------------

[2004-07-15 11:48:06] [EMAIL PROTECTED]

It's still a feature request.

------------------------------------------------------------------------

[2004-07-15 05:59:09] csmoak at andrew dot cmu dot edu

This really should be taken care of.

------------------------------------------------------------------------

[2004-07-09 06:57:23] csmoak at andrew dot cmu dot edu

Description:
------------
__get() and __set() are currently blocked from being implicitly called
for a particular instance of an object when they are currently
executing. However, this can cause code to behave differently if it is
called from within __get()/__set() or if it is called without
__get()/__set().

The following example uses good OOP methodology that tries to make use
of __get() and __set(), but is hindered by it, instead.

The problem lies in the use of the in_get and in_set member variables
in the zend_object strcut to provide a blanket block to calling __get
or __set recursively (when called implicitly). A possible solution
would be to only prevent code directly in the __get() and __set()
method bodies from implicitly calling __get() or __set(), but allowing
it in any called code.

Reproduce code:
---------------
http://www.andrew.cmu.edu/user/csmoak/getset.phps

Expected result:
----------------
correct behavior (without making use of __get/__set):<br>
before set : default<br>
after set  : propertyValue<br>
PropertyAccessClass Object
(
    [property:private] => propertyValue
    [defaultProperty:private] => default
    [changed:private] => 1
)
<br><br>

incorrect behavior (making use of __get/__set):<br>
before set : default<br>
after set  : propertyValue<br>
PropertyAccessClass Object
(
    [property:private] => propertyValue
    [defaultProperty:private] => default
    [changed:private] => 1
)

Actual result:
--------------
correct behavior (without making use of __get/__set):<br>
before set : default<br>
after set  : propertyValue<br>
PropertyAccessClass Object
(
    [property:private] => propertyValue
    [defaultProperty:private] => default
    [changed:private] => 1
)
<br><br>

incorrect behavior (making use of __get/__set):<br>
<br />
<b>Notice</b>:  Undefined property: 
PropertyAccessClass::$PropertyChanged in
<b>C:\ftproot\pnet\test2.php</b> on line <b>22</b><br />
<br />
<b>Notice</b>:  Undefined property: 
PropertyAccessClass::$DefaultProperty in
<b>C:\ftproot\pnet\test2.php</b> on line <b>33</b><br />
before set : <br>
after set  : propertyValue<br>
PropertyAccessClass Object
(
    [property:private] => propertyValue
    [defaultProperty:private] => default
    [changed:private] => 
    [PropertyChanged] => 1
)



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=29070&edit=1

Reply via email to