#29689 [Opn->Asn]: default value of protected member overrides default value of private

From: Date: Tue, 19 Apr 2005 14:19:13 +0000
Subject: #29689 [Opn->Asn]: default value of protected member overrides default value of private
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-77890@lists.php.net to get a copy of this message
ID: 29689 Updated by: sniper@php.net Reported By: php dot net at benjamin dot schulz dot name -Status: Open +Status: Assigned Bug Type: Zend Engine 2 problem Operating System: * -PHP Version: 5CVS-2005-03-07 +PHP Version: 5CVS-2005-04-19 -Assigned To: +Assigned To: andi New Comment: <?php class foo { private $foo = 'foo'; function printFoo1() { echo __CLASS__, ': ', $this->foo, "\n"; } } class bar extends foo { protected $foo = 'bar'; function printFoo2() { echo __CLASS__, ': ', $this->foo, "\n"; } } class baz extends bar { protected $foo = 'baz'; function printFoo3() { echo __CLASS__, ': ', $this->foo, "\n"; } } $bar = new baz; $bar->printFoo1(); $bar->printFoo2(); $bar->printFoo3(); ?> Outputs: foo: baz bar: baz baz: baz When it should output: foo: foo bar: bar baz: baz Right? Previous Comments: ------------------------------------------------------------------------ [2004-08-31 19:00:41] php dot net at benjamin dot schulz dot name you don't get the point, the problem is that baz's protected $foo overrides foo's private $foo, that should not happen using parent::foo() is a common technique, and there is a $this because it get's the context of the calling point ------------------------------------------------------------------------ [2004-08-31 18:32:35] tony2001@php.net Please, be more verbose next time if you want to get any help. Your conciseness doesn't help very much. The problem is that you're trying to access class members through $this variable using static methods. As you can understand in this case there is no $this and behavior seems to be undefined (shouldn't there be an error, btw?). ------------------------------------------------------------------------ [2004-08-31 17:48:56] php dot net at benjamin dot schulz dot name yep tony, you're right, and now read the bug report ------------------------------------------------------------------------ [2004-08-31 16:24:10] tony2001@php.net Private members belong only to the class where they were defined and cannot be inherited. ------------------------------------------------------------------------ [2004-08-15 22:03:50] php dot net at benjamin dot schulz dot name default value of protected member overrides default value of private ------------------------------------------------------------------------ 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 http://bugs.php.net/29689 -- Edit this bug report at http://bugs.php.net/?id=29689&edit=1

« previous php.bugs (#77890) next »