All, I sent this originally to the php-general mailing list, but there doesn't appear to be any consensus on how private variables should act. Any ideas?
Thanks, --Paul ---------- Forwarded Message ---------- Subject: Re: [PHP] Private and protected variables in PHP 5? Date: Saturday 12 Jul 2003 10:51 am From: Paul Hudson <[EMAIL PROTECTED]> To: Greg Beaver <[EMAIL PROTECTED]>, Alan D'Angelo <[EMAIL PROTECTED]> Greg, Meh - I thought namespaces were canned? Or is it just that the Poppy object gets the private variables, but when I say $poppy->Name, PHP creates a new public $Name variable and sets that? Anyway, I've moved this from php-general to php-internals in the hope that we can get a sure answer along the lines of "This isn't a bug" Anyone? --Paul On Saturday 12 Jul 2003 12:27 am, Greg Beaver wrote: > Hi to both of you, > > What is happening here is that there is a separate namespace for private > elements in PHP 5. You can have both a private $Name and a public > $Name if it is defined at runtime. I don't know if this is a feature or > a bug, I'd call it a bug since redeclaration of a variable is not > allowed, perhaps we should include the developers in on this question? > > Try this script to see the duplicate $Name variable: > > <?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 > ) > > Regards, > Greg > -- > phpDocumentor > http://www.phpdoc.org > > Alan D'Angelo wrote: > > Hello, > > In my PHP5 installation the first example print Poppy, > > but the second return > > Fatal error: Call to protected method dog::bark() from context '' in > > c:\appserv\www\test\mailingphp50.php on line 18 > > > > In my previous installation oh PHP5, private variable worked well ... > > PHP 5 is one beta, try with an next snapshot. > > > > > > Alan > > > > > > ----- Original Message ----- > > From: "Paul Hudson" <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: Friday, July 11, 2003 11:21 PM > > Subject: [PHP] Private and protected variables in PHP 5? > > > >>All, > >> > >>I'm toying with the new stuff available in PHP 5 (latest CVS), but I've > > > > hit a > > > >>brick wall: both private and protected don't seem to work as I'd expect > > > > them > > > >>to. > >> > >>Here's an example script: > >> > >><?php > >> class dog { > >> // declare two private variables > >> private $Name; > >> private $DogTag; > >> > >> public function bark() { > >> print "Woof!\n"; > >> } > >> } > >> > >> // 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; > >>?> > >> > >>For some reason, that script works fine - PHP doesn't object to me > >> setting private variables in the derived class. Yet if I use "$poppy = > >> new dog", > > > > the > > > >>script errors out as expected. It's almost like PHP inherits the member > >>variables, but not the attached access control. > >> > >>For protected, here's another script: > >> > >><?php > >> class dog { > >> // this next function is protected > >> // viz, it should be available to dog > >> // and its children > >> > >> protected function bark() { > >> print "Woof!\n"; > >> } > >> } > >> > >> class poodle extends dog { > >> // nothing happening here > >> } > >> > >> $mydog = new poodle; > >> // I now call the protected function > >> $mydog->bark(); > >>?> > >> > >>That script errors out saying that I can't call the protected function > > > > bark - > > > >>surely, being protected, it should be available in the poodle class too? > >> > >>Of course, it might be that these two pieces of functionality are not yet > >>implemented in PHP, or, more likely, that I'm just misinterpreting the > >>documentation! ;) > >> > >>If you have any insight, please CC me into your response to the list. > >> > >>Thanks, > >> > >> > >>Paul > >> > >>-- > >>PHP General Mailing List (http://www.php.net/) > >>To unsubscribe, visit: http://www.php.net/unsub.php ------------------------------------------------------- -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php