Date: 08/31/00
- Next message: Andre' Langhorst: "Re: [PHP-DEV] __string_value() crashes with return"
- Previous message: Colin Viebrock: "RE: [PHP-DEV] php.ini directive clarification"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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.
But finally I managed to write a short example script where it is not
working. Before I open a bug report, I want to be sure, that I am doing it
the right way. 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.
Any hints? Is this a bug in PHP, a not implemented feature, or a bug in my
script?
-- MfG Klaus Reimer twisd AG i.G. http://www.twisd.de-- 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: Andre' Langhorst: "Re: [PHP-DEV] __string_value() crashes with return"
- Previous message: Colin Viebrock: "RE: [PHP-DEV] php.ini directive clarification"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

