Hello, On Dec 1, 2007 9:38 PM, Richard Quadling <[EMAIL PROTECTED]> wrote:
> On 01/12/2007, Jingcheng Zhang <[EMAIL PROTECTED]> wrote: > > Well, yes, "private" denies accessing from other class(including its > child > > class), this is what "encapsulation" means. But when refering to > > inheritance, why forbids private properties/methods being *extended* to > > child classes? This is what I mean, as the following example: > > > > <?php > > class p { > > protected $foo = 'foo'; > > private $bar = 'bar'; > > } > > class c extends p { > > public function f() { > > $o = new p(); > > $o->foo = 'FOO'; // Correct, "foo" is protected property of p > and > > thus allow accessing from child class > > This is not allowed. $o is in a different context (I think that's the > right way of describing this) and as such has no access to the private > or protected members of $o. Just because it $o is created within class > c, it is not related. Again, the context check is based on the class and not on the instance, which is "correct" (same behavior in other OO languages like java, scala, or C++) I believe what he means is that private properties are simply masked, allowing one user to dynamically create an "overloaded" property, like: class A { private $a; } class B extends A{ private $a; // allowed, but I guess what he wants is to have that optional public function foo() { $this->a = 3; } } Having this optional is a bad thing because: 1) it reduces the readability 2) the access type of the dynamically created B::$a would be ambiguous. So, you should always explicitly define the overloaded property, and the language shouldn't be modified to allow such concept. Please take this to php_generals as this is not really the right place anymore. Regards -- Etienne Kneuss http://www.colder.ch Men never do evil so completely and cheerfully as when they do it from a religious conviction. -- Pascal