Mombu the Php Forum sponsored links

Go Back   Mombu the Php Forum > Php > #28444 : "Cannot access undefined property for object with overloaded property access"
User Name
REGISTER NOW! Mark Forums Read

sponsored links

1 4th March 00:35
External User
Posts: 1
Default #28444 : "Cannot access undefined property for object with overloaded property access"

ID: 28444
Comment by: keithm at aoeex dot com
Reported By: dennis at inmarket dot lviv dot ua
Status: Assigned
Bug Type: Class/Object related
Operating System: WinXP
PHP Version: 5.0.0RC2
Assigned To: andi
New Comment:

I ran into this problem also, but slighly differently. In my case, the
first property I'm accessing is a validly declared and set property of
the class, instead of set using __set or read using __get. I've tried
to reproduce it using simpler code, but I can't seem to get it done.
The actual code I'm using is far too complex for a bug report
submission (it's a customized DOM implemtation)

I'll see if I can describe it at all. Basically I have the following
classes that are involved:
abstract class Node -- Does define __set/__get
abstract class HTMLElement extends Node -- Does define __set/__get
class HTMLInputElement extends HTMLElement -- Does define __set/__get
class FormElement extends HTMLElement -- Does NOT define __set/__get

Now, the FormElement class has variable declarations like so:
private $minput;
private $mlabel;
private $mlplacement;
private $container;

$minput is eventuall an instance of HTMLInputElement when this error
occurs. Here is the relevent part of the formElement->setInputType

public function setInputType($xtype){
switch ($xtype){
case 'radio': case 'text': case 'entry': case
'button': case 'image': case 'submit': case 'reset': case 'checkbox':

/* as of this point, $this->minput is a valid HTMLInputElement
instance, verified w/ print_r */
$this->minput->type = $xtype;

When that method is called, I receive the error in question on the
line: $this->minput->type = $xtype;

I'll keep trying to come up with simpler code that reproduces the bug,
but if anyone does want to view the big code (maybe for clarity) it is
available at

My PHP version is 5.0.2, and I can reproduce with both the CLI and
Apache 2 Module. Operating systems Both FreeBSD and Linux 2.6.9

Previous Comments:

[2004-11-08 20:05:09] php at rodric dot org

I ran into this in a slightly different way -- trying to
foreach through an ArrayAccess object. Interestingly,
removing the __set from class O allows this to work.

class O
private $m_a = array();

function __get ($key)
return $this->m_a[$key];
function __set ($key, $val)
$this->m_a[$key] = $val;

class A implements ArrayAccess, IteratorAggregate
private $m_e = array();

function __construct ($e = NULL)
$this->m_e = is_null ($e) ? array() : $e;

function offsetSet ($key, $value)
$this->m_e[$key] = $value;

function offsetGet ($key)
if (isset ($this->m_e[$key]))
return $this->m_e[$key];

function offsetUnset ($key)
unset ($this->m_e[$key]);

function offsetExists ($key)
return isset ($this->m_e[$key]);

function getIterator ()
return new ArrayIterator($this->m_e);

$o = new O();

$o->a = new A(array(1, 2, 3));

foreach ($o->a as $e)
echo "$e ";


[2004-10-13 14:05:03] info at pandora-web dot de

Another Test Case:
class TestClass {
private $_p = array();

public function __get($propName){
return $this->_p[$propName];

public function __set($propName, $propValue){
$this->_p[$propName] = $value;

$a = new TestClass();
$a->testVar = 'test';
print $a->testVar; //--> 'test'

$a->testVar = new TestClass();
$a->testVar->testVar = 'test2';
// __set of $a->testVar called instead
of getter of $a->testVar and setter of $a->testVar->testVar

Solution Hint:

I think I is better to call the __get method of the first objects and
than call the __set method of the last one in chain. Like you with


[2004-08-21 03:21:10] matth at alsync dot com

Another work around for this is:

a->b->__set('c', 'value');

At least the underlying calsses do not need to be changed to make this


[2004-08-05 11:19:49] dennis at inmarket dot lviv dot ua

To Please don't feel hurt by this comment. I think you
guys did a great job on making PHP5 what it is, but this bug is
different. I think (but I mon sure, since I don't get anything in the
PHP engine code) this should fix very well.


[2004-08-05 11:04:45]

There are plenty of other non fixed bugs. If we were to release when
the bug count reaches zero we would never release.


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

Edit this bug report at
  Reply With Quote

  sponsored links


Thread Tools
Display Modes

Copyright 2006 - Dies Mies Jeschet Boenedoesef Douvema Enitemaus -