RE: [PHP-DEV] PHP 4.0 Bug #6529 Updated: Problems with $this in class constructor

From: Date: Tue, 31 Oct 2000 23:22:25 +0000
Subject: RE: [PHP-DEV] PHP 4.0 Bug #6529 Updated: Problems with $this in class constructor
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-36565@lists.php.net to get a copy of this message
Is this a circular reference? I only see one reference so I don't see how it is a circular reference or am I just not understanding what a circular reference is? Mike P.S. This bug is related/duplicates (for whoever tracks these things) of bugs: #7511 #7482 #7455 #7454 -----Original Message----- From: mathieu@php.net [mailto:mathieu@php.net] Sent: Tuesday, October 31, 2000 3:55 PM To: php-dev@lists.php.net Subject: [PHP-DEV] PHP 4.0 Bug #6529 Updated: Problems with $this in class constructor ID: 6529 Updated by: mathieu Reported By: k.reimer@twisd.de Status: Open Bug Type: Scripting Engine problem Assigned To: Comments: This is a circular reference (IIRC) and that's not possible with PHP, (Believe me, I learned the hard way:-)) Use your second example.. Previous Comments: --------------------------------------------------------------------------- [2000-09-06 13:00:05] stas@php.net reclassify --------------------------------------------------------------------------- [2000-09-04 09:38:57] k.reimer@twisd.de Hi, Currently we are in great trouble with PHP4. We are heavily using references to objects in our current project and we need to create a reference from a class in the constructor of the class itself. But it is not working. I have tested it with PHP 4.0.1 and the new PHP 4.0.2. Finally I managed to write a short example script where it is not working. Here is the code that is refusing to work correctly: <?php class CParent { var $Ref; function setRef(&$Child) { $this->Ref=&$Child; } function drawRef() { printf(":%s:<br>n",$this->Ref->Value); } } class CChild { var $Value; function CChild(&$Parent) { $Parent->setRef($this); } } $Parent=new CParent; $Child=new CChild($Parent); $Child->Value="Test"; $Parent->drawRef(); ?> This script creates a Parent-Class and a Child-Class. The constructor of the child class connects itself to the Parent class by passing its reference to the Parent. Then I change its property $Value to "Test" and call the Parents drawRef()-function. The drawRef-Function is printing the Value of the referenced object. Well, finally it is NOT printing the Value. The value seems to be empty. But the reference is working. If a add some methods to CChild, the Parent can call these methods through the reference. But all properties of CChild are empty. It looks like $Parent is working with a COPY of $Child and not with a reference. I thought there is something wrong with the setRef()-method, where I store the Reference in the $Ref-Variable, but... ....if I do the same in another way (Not using the constructor, instead writing the reference from Child to Parent manually) it is working. Here is the working code: <?php class CParent { var $Ref; function setRef(&$Child) { $this->Ref=&$Child; } function drawRef() { printf(":%s:<br>n",$this->Ref->Value); } } class CChild { var $Value; // In this example I don't use the constructor to connect this // class to CParent } $Parent=new CParent; // Instead I call the setRef()-method manually to do it $Child=new CChild; $Parent->setRef($Child); $Child->Value="Test"; $Parent->drawRef(); ?> This script is working perfectly. So I wonder why is the first script not working? What is wrong about making a reference to $this in the constructor of $this? And to create just more confusion: If I assign a value to $this->Value in the constructor, this value is printed by drawRef() and values assigned later are ignored. --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=6529 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net For additional commands, e-mail: php-dev-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net

« previous php.dev (#36565) next »