Re: Questionable private $varname behavior

From: Date: Sat, 12 Jul 2003 17:16:51 +0000
Subject: Re: Questionable private $varname behavior
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-3388@lists.php.net to get a copy of this message
At 07:27 PM 11/7/2003 -0400, Greg Beaver wrote:
Hi, a discussion on php.general led to the discovery of this oddly legal script: <?php class dog {
    // declare two private variables
    private $Name;
    private $DogTag;
    public function bark() {
      print "Woof!\n";
    }
    public function printName() {
      print $this->Name; // prints nothing!
    }
} // new class, for testing derived stuff class poodle extends dog {
    public function bark() {
      print "Yip!\n";
    }
} // I now create an instance of the // derived class $poppy = new poodle; // and set its private property $poppy->Name = "Poppy"; print $poppy->Name. "\n"; $poppy->printName(); print_r($poppy); ?> outputs: Poppy poodle Object (
    [Name:private] =>
    [DogTag:private] =>
    [Name] => Poppy
) Is this expected behavior or should I open a bug?
Seems to be expected behavior to me. poodle doesn't *know* the private variable "Name" so when you use $poppy->Name it declares a public member instead. As printName() is inherited from the base class it accesses the private member and not the public one. Andi

« previous php.internals (#3388) next »