Uhm..I have always closed the duplicates after the original (which they
refer to) was closed. Any opinions about this? As the current bug system
doesn't have any support for 'multiple' closing, I think it's better to
close bugs after they are fixed, be it a duplicate or not.
--Jani
On 9 Mar 2001 [EMAIL PROTECTED] wrote:
>ID: 8935
>Updated by: andre
>Reported By: [EMAIL PROTECTED]
>Old-Status: Closed
>Status: Duplicate
>Bug Type: Class/Object related
>Assigned To:
>Comments:
>
>not really this is only a duplicate report for an already
>fixed bug...
>
>Previous Comments:
>---------------------------------------------------------------------------
>
>[2001-03-09 17:09:08] [EMAIL PROTECTED]
>It's fixed -> closed.
>
>--Jani
>
>
>---------------------------------------------------------------------------
>
>[2001-03-09 13:50:45] [EMAIL PROTECTED]
>this has been fixed for months,
>please use =& new instead of = new in this special case
>
>---------------------------------------------------------------------------
>
>[2001-02-24 14:14:09] [EMAIL PROTECTED]
>Please see the 4.0.4 release change log a lot of things along this line were fixed.
>
>James
>
>---------------------------------------------------------------------------
>
>[2001-01-26 09:37:16] [EMAIL PROTECTED]
>The following script demonstrates the problem.
>
><?php
>/*
>thistest.php
>jp, 2001-01-25
>Demonstration of bug in passing '$this' as a reference in the constructor.
>The problem is that it will not be a reference to the newly created object that is
>passed but rather a new copy. This is demonstrated below.
>
>The Container class is just a driver class
>
>The bug is demostrated in the A1 class. The A class uses an Init() method to pass the
>'$this' reference which is a workaround for this particular bug.
>
>Analysis of problem:
>It seems that the '$this' pointer is not safe to use in the constructor since it
>probably doesn't get properly initialized for the object until after the constructor
>has been run.
>
>*/
>
>
>
>class ContainerA {
> var $a;
> function ContainerA() {
> $this->a=new A();
> $this->a->Init();
> echo "A val before calling change: ".$this->a->val."<br>";
> $this->a->bobj->ChangeA();
> echo "A val after calling change (should be 3): ".$this->a->val."<br>";
> }
>}
>
>class A {
> var $val=1;
> var $bobj=null;
>
> function A() {
> $this->bobj = new B();
> }
> function Init() {
> // Workaround it is safe to use a refernce to this outside the constuctor
> $this->bobj->Init(&$this);
> }
> function SetVal($v) {
> $this->val=$v;
> }
>};
>
>class B {
> var $aobj=null;
> function B() {
> }
> function Init(&$obj) {
> $this->aobj=&$obj;
> }
> function ChangeA() {
> $this->aobj->SetVal(3);
> }
>};
>
>class ContainerA1 {
> var $a;
> function ContainerA1() {
> $this->a=new A1();
> echo "A val before calling change: ".$this->a->val."<br>";
> $this->a->bobj->ChangeA();
> echo "A val after calling change (should be 3): ".$this->a->val."<br>";
> }
>}
>
>// BUG
>class A1 {
> var $val=1;
> var $bobj=null;
>
> function A1() {
> $this->bobj = new B();
>
> // BUG. A reference of 'this' is NOT passed here as it seems but a copy!
> // Hence the bobj will contain another copy of A1 and not the one we
> // are just creating.
> $this->bobj->Init(&$this);
> }
> function SetVal($v) {
> $this->val=$v;
> }
>};
>
>echo "Demonstration of 'this' bug.<p>";
>echo "Using class A (workaround)<br>";
>$c1=new ContainerA();
>
>echo "<p>Using class A1 (BUG)<br>";
>$c1=new ContainerA1();
>
>?>
>
>---------------------------------------------------------------------------
>
>
>
>ATTENTION! Do NOT reply to this email!
>To reply, use the web interface found at http://bugs.php.net/?id=8935&edit=2
>
>
>
--
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]