From:             drm at melp dot nl
Operating system: Windows XP
PHP version:      5.0.0b2 (beta2)
PHP Bug Type:     Feature/Change Request
Bug description:  At least a notice when accessing private members in a derived class?

Description:
------------
Hi :)

I read in the new features list of Zend Engine 2 that access modifiers
like private/protected are introduced, but something really weird comes in
mind when reading carefully.

Private members are returned _empty_ wheing tried to be accessed from
derived classes. "Intended behaviour", is said. OK, i can live with that.
But even when i turned on notices with error_reporting, nothing is
noticed?

The case grows when looking at the following code sample. This could
produce very weird bugs when writing PHP code (i hope you can see that
;)), so I would like to convince you all to at least implement a Notice
when trying to access (non-defined) private (parent) members?

It would do the coders not using E_ALL no harm :) Please consider this :)

Reproduce code:
---------------
error_reporting ( E_ALL );
class Test {
   private $member;
   function __construct ()       { $this->member = "Test constructor"; }
   function __toString ()        { return "Member contains:
{$this->member}"; }
   function getMember ()         { return $this->member;  }
   function setMember ( $m )     { $this->member = $m; }
}
class DeriveTest extends Test {
   function __construct ()       { parent::__construct (); }
   function __toString ()        { return "Member contains:
{$this->member}, though getMember() says: " . $this->getMember() ."?"; }
   function setMember ( $m )     { $this->member = $m; }
}
$o = new DeriveTest ();
echo $o, '<br>';
$o->setMember ( "a" );
echo $o, '<br>';


Expected result:
----------------
The expected result would be for me:

Notice: undefined member ``DeriveTest::$member'' in ...\test.php on line
12
Member contains: , though getMember() says: Test constructor?
Member contains: a, though getMember() says: Test constructor?

or something of the sort

Actual result:
--------------
The actual result is:

Member contains: , though getMember() says: Test constructor?
Member contains: a, though getMember() says: Test constructor?

-- 
Edit bug report at http://bugs.php.net/?id=26325&edit=1
-- 
Try a CVS snapshot (php4):  http://bugs.php.net/fix.php?id=26325&r=trysnapshot4
Try a CVS snapshot (php5):  http://bugs.php.net/fix.php?id=26325&r=trysnapshot5
Fixed in CVS:               http://bugs.php.net/fix.php?id=26325&r=fixedcvs
Fixed in release:           http://bugs.php.net/fix.php?id=26325&r=alreadyfixed
Need backtrace:             http://bugs.php.net/fix.php?id=26325&r=needtrace
Try newer version:          http://bugs.php.net/fix.php?id=26325&r=oldversion
Not developer issue:        http://bugs.php.net/fix.php?id=26325&r=support
Expected behavior:          http://bugs.php.net/fix.php?id=26325&r=notwrong
Not enough info:            http://bugs.php.net/fix.php?id=26325&r=notenoughinfo
Submitted twice:            http://bugs.php.net/fix.php?id=26325&r=submittedtwice
register_globals:           http://bugs.php.net/fix.php?id=26325&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=26325&r=php3
Daylight Savings:           http://bugs.php.net/fix.php?id=26325&r=dst
IIS Stability:              http://bugs.php.net/fix.php?id=26325&r=isapi
Install GNU Sed:            http://bugs.php.net/fix.php?id=26325&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=26325&r=float

Reply via email to