Date: 10/31/00
- Next message: eval <email protected>: "[PHP-DEV] PHP 4.0 Bug #7561: Segmentation Fault, when i try to run a CGI program"
- Previous message: joey <email protected>: "[PHP-DEV] PHP 4.0 Bug #7560 Updated: strtok or while-loop never returns"
- In reply to: Michael Youngstrom: "RE: [PHP-DEV] PHP 4.0 Bug #6529 Updated: Problems with $this in class constructor"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Wed, 01 Nov 2000, you wrote:
>Is this a circular reference?
>
It _is_not_ a circular reference. The effect (I wont call it a problem/bug
because it is quite reasonable, just not documented ) is due to the fact that
the object is not completely 'created' until after the constructor has
finished and accordingly $this does not reference a valid object in the
constructor. To see what really goes on check out the zend source code.
>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 <email protected> [mailto:mathieu <email protected>]
>Sent: Tuesday, October 31, 2000 3:55 PM
>To: php-dev <email protected>
>Subject: [PHP-DEV] PHP 4.0 Bug #6529 Updated: Problems with $this in
>class constructor
>
>
>ID: 6529
>Updated by: mathieu
>Reported By: k.reimer <email protected>
>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 <email protected>
>reclassify
>
>---------------------------------------------------------------------------
>
>[2000-09-04 09:38:57] k.reimer <email protected>
>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
>
>
-- Regards,Alan van den Bosch Sanguis Pty Ltd
/* All generalizations are false. */
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe <email protected> For additional commands, e-mail: php-dev-help <email protected> To contact the list administrators, e-mail: php-list-admin <email protected>
- Next message: eval <email protected>: "[PHP-DEV] PHP 4.0 Bug #7561: Segmentation Fault, when i try to run a CGI program"
- Previous message: joey <email protected>: "[PHP-DEV] PHP 4.0 Bug #7560 Updated: strtok or while-loop never returns"
- In reply to: Michael Youngstrom: "RE: [PHP-DEV] PHP 4.0 Bug #6529 Updated: Problems with $this in class constructor"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

