Hello,
On Nov 30, 2007 5:24 PM, Jingcheng Zhang <[EMAIL PROTECTED]> wrote:
> Hi Etienne,
> Is "private" only an access limiter between classes?If so, I think
> private
> properties and methods should be OK to be extended into the child class,
> but
> currently that's not the case,
You're describing what "protected" does here.
About the "bug", var_dump in 5_3 already states the origin of the private
var:
<?php
class A {
private $a = 2;
protected $b = 3;
}
class B extends A {
}
var_dump(new B);
?>
will produce:
object(B)#1 (2) {
["a":"A":private]=>
int(2)
["b":protected]=>
int(3)
}
and there is also a bug here, consider the
> following example:
>
> <?php
> class P {
> private $name = 'hello';
> }
> class C extends P {
> public function f() {
> echo $this->name;
> }
> }
> $o = new C();
> var_dump($o); // object(C)#1 (1) { ["name:private"]=> string(5) "hello" }
> $o->f(); // Notice: Undefined property: C::$name in
> D:\Development\Workspace\index.php on line 7
> ?>
>
> When using var_dump on $o, it shouldn't display the private property
> "name"
> here as it is not extended. If we allow private properties be extended
> into
> the child class, then the codes above and following should both work OK:
>
> <?php
> class P {
> private $name = 'hello';
> }
> class C extends P {
> public function f() {
> $o = new P();
> echo $o->name; // Incorrect, as the code scope is not class P
> }
> public function g() {
> echo $this->name; // This should be OK, as $name is extended from
> P,
> and is property of class C, not class P
> }
> }
> $c = new C();
> $c->f();
> $c->g();
> ?>
>
>
> On Nov 30, 2007 10:08 PM, Etienne Kneuss <[EMAIL PROTECTED]> wrote:
>
> > Hello,
> >
> > On 11/30/07, Marco Kaiser <[EMAIL PROTECTED]> wrote:
> > >
> > > Conclusion:
> > > 1. Why i can access a private property from a different class instance
> > > (name) but same type ?
> > > $aa and $bb are instances of aaa but not the same.
> > > 2. This doesnt works if cc is a own class with same property name (ie.
> > > interface or something like this)
> >
> >
> > The check whether a class property/method is accessible is based on the
> > class of the scope you're in. It's not based on the instance. Note that
> > encapsulation is still conserved as private properties are accessible
> only
> > from methods of the class they're defined in. It also allows you to work
> > with static methods that access private properties.
> >
> > 3. Is it a bug that i can't use same property name in my child class?
> > > (normaly the parent property isnt visible to the child)
> > > cc extends aaa.
> >
> >
> > I'm not sure what you mean. As you can do:
> >
> > class A { private $foo = 2; }
> > class B extends A { private $foo = 3; public function foo() { echo
> > $this->foo; } }
> > $b = new B; $b->foo(); // 3
> >
> >
> > Thats just some questions :)
> > >
> > > -- Marco
> > >
> > > --
> > > PHP Internals - PHP Runtime Development Mailing List
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> > >
> > >
> >
> >
> > --
> > Etienne Kneuss
> > http://www.colder.ch
> >
> > Men never do evil so completely and cheerfully as
> > when they do it from a religious conviction.
> > -- Pascal
> >
>
>
>
> --
> Best regards,
> Jingcheng Zhang
> Room 304, Dormitory 26 of Yuquan Campus, Zhejiang University
> P.R.China
>
--
Etienne Kneuss
http://www.colder.ch
Men never do evil so completely and cheerfully as
when they do it from a religious conviction.
-- Pascal