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
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php