Pleaes use the web interface for updating bugs! I missed this mail until now.
--Jeroen ----- Original Message ----- From: "Doug Plant" <[EMAIL PROTECTED]> Newsgroups: php.dev To: <[EMAIL PROTECTED]> Sent: Sunday, October 28, 2001 4:38 AM Subject: Re: Bug #13842 Updated: Member variables in parent and child classes overwrite each other > > Hi, > > Thanks for the reply. Still looks bad. > > My mistake, but I left the script in it's "good" configuration. If you > change the line: > > class C2 extends C1_1 > > To: > > class C2 extends C1 > > the the bad behaviour is shown. I left the line in the former state. > > Doug > > > > >From: Bug Database <[EMAIL PROTECTED]> > >To: [EMAIL PROTECTED] > >Subject: Bug #13842 Updated: Member variables in parent and child classes > >overwrite each other > >Date: 27 Oct 2001 05:37:46 -0000 > > > >ID: 13842 > >Updated by: sniper > >Reported By: [EMAIL PROTECTED] > >Old Status: Open > >Status: Feedback > >Bug Type: Class/Object related > >Operating System: Windows NT 5.0 build 2195 > >PHP Version: 4.0.6 > >New Comment: > > > >Works fine for me with latest CVS. Please try the > >development build from http://www.php4win.com/ > > > >--Jani > > > > > > > >Previous Comments: > >------------------------------------------------------------------------ > > > >[2001-10-26 17:52:30] [EMAIL PROTECTED] > > > >I'm not all that familiar with PHP, so it's possible I haven't understood > >something that should be obvious, or have mistyped something. But assuming > >that's not the case: > > > >To my eye this makes using someone else's classes via inheritence a wee bit > >dangerous, and makes using inheritence at all somewhat problematic since > >changing a class that exists in an inheritence makes one liable to create > >subtle bugs in code that one has not modified - which defeats one of the > >(possibly the most) principal purposes of OO. > > > >If I could make a suggestion: support of 'private' and 'public' for member > >variables might be a good thing. Especially if access defaulted to > >'private' and that meant that the variable was only visible to the > >immediate class. > > > >Using the CGI binary without modification running on "Microsoft-IIS/5.0" I > >used the following test script: > > > ><html> > ><head> > ><title>Inheritence Bug</title> > ></head> > ><body> > > > ><?php > > file://===================================================================== ==== > > // NOTE: > > // Bad behaviour if C2 extends C1, Correct if C2 extends C1_1 > > class C2 extends C1_1 > > { > > var $m_sMe = "C2"; // ERROR: this overwrites parent > > var $m_sIniter = ""; > > > > function C2( $sIniter="") > > { > > $this->m_sIniter = $sIniter; // OK - by defn > > parent::C1( $this->m_sMe); // OK - the way to do it > > } > > > > function WhoIsIt() > > { > > printf( "C2::WhoIsIt() : This is: " . $this->m_sMe . "<br>\n"); > > printf( "Inited by: " . $this->m_sIniter . "<br>\n"); > > > > parent::WhoIsIt(); > > } > > } > > > > file://===================================================================== ==== > > class C1_1 > > { > > var $m_sMe_1 = "C1"; > > var $m_sIniter_1 = ""; > > > > function C1( $sIniter="") > > { > > print( "(OK)<br>\n"); > > $this->m_sIniter_1 = $sIniter; > > } > > > > function WhoIsIt() > > { > > printf( "C1::WhoIsIt() : This is: " . $this->m_sMe_1 . "<br>\n"); > > printf( "Inited by: " . $this->m_sIniter_1 . "<br>\n"); > > } > > > > function ResetBase() > > { > > $this->m_sMe_1 = "C1"; > > > > printf( "C1::ResetBase() : This is: " . $this->m_sMe_1 . "<br>\n"); > > printf( "Inited by: " . $this->m_sIniter_1 . "<br>\n"); > > } > > } > > > > file://===================================================================== ==== > > class C1 > > { > > var $m_sMe = "C1"; > > var $m_sIniter = ""; > > > > function C1( $sIniter="") > > { > > print( "(Bad)<br>\n"); > > $this->m_sIniter = $sIniter; // ERROR: this overwrites child's value > > } > > > > function WhoIsIt() > > { > > printf( "C1::WhoIsIt() : This is: " . $this->m_sMe . "<br>\n"); > > printf( "Inited by: " . $this->m_sIniter . "<br>\n"); > > } > > > > function ResetBase() > > { > > $this->m_sMe = "C1"; > > > > printf( "C1::ResetBase() : This is: " . $this->m_sMe . "<br>\n"); > > printf( "Inited by: " . $this->m_sIniter . "<br>\n"); > > } > > } > > > > file://===================================================================== ==== > > $test = new C2( "Doug"); > > $test->WhoIsIt(); > > file://$test->ResetBase(); > >?> > > > ><p> > >In case there is a platform dependency, this is what I consider correct > >output:<br> > ><pre> > >C2::WhoIsIt() : This is: C2 > >Inited by: Doug > >C1::WhoIsIt() : This is: C1 > >Inited by: C2 > ></pre> > ></p> > > > ></body> > ></html> > > > > > >------------------------------------------------------------------------ > > > > > > > >ATTENTION! Do NOT reply to this email! > >To reply, use the web interface found at > >http://bugs.php.net/?id=13842&edit=2 > > > > > _________________________________________________________________ > Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp > -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]