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?
Greg
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