Re: [PHP] object references lose local variables

2001-10-03 Thread Steve Strassmann

Hi, I'm the original author. I put my address in the body of the message to
avoid spammers.
To answer your question, nobody answered my question. However,
after messing around, I found a change that did the trick. Coming from an OOP
background (lisp, smalltalk, etc.) it sure seems to me that PHP has a seriously
brain-damaged notion of objects and references.
Nevertheless, if you're a guest in someone's house you have to play by their
rules.
In this case, the rules are to use "=& new" instead of "= new" to create the
objects
in the first place. The new code below works as intended:

  $apple = & new Org("Apple");
  $banana = & new Org("Banana");
  $cherry = & new Org("Cherry");

Also, please note there's a funny line-wrap in prettyprint(), but you can
remove the extra CR.

[EMAIL PROTECTED]
 (but without the "-no-spam-please")

Joel Ricker wrote:

> I tried to ask this person if anybody answered his question personally or
> not but it appears the e-mail address isn't real ([EMAIL PROTECTED]).  Understanable.
>
> Does anyone know about this or did anyone send em an e-mail about this?
> Just starting work on my first serious OOP project beyond a handful of basic
> classes and am interested in any information or problems associated with it.
>
> Joel
>
> : I'd like to ask your help to figure out why PHP objects are stripped of
> : their local variables when you add the objects to an array.
> : Shouldn't these be references, not shallow copies?
> :
> : The code below is a simple org chart.
> : I create three instances, each is added to a global array called orgs[].
> :
> : Each instance has a child, but when you add them to orgs[]
> : they lose their children.
> : I used & to create a reference, not a copy, but the problem remains.
> :
> : Please reply by email to [EMAIL PROTECTED],
> : but without the "-no-spam-please".
> :
> : When run in PHP Version 4.0.6, I get this output.
> : Notice that $apple retains its local value of $children,
> : but the same object, pushed onto $orgs[0], loses its local value.
> :
> : --- output web page
> :
> : 
> : 
> : 
> :
> : 
> : 
> : 
> :
> :
> : --- source code --
> :  : // A simple (buggy) Org chart package
> :   global $orgs;
> :   $orgs = array();
> :
> :   class Org {
> : var $name;
> : var $children;
> :
> : function Org ($iname) {
> :  global $orgs;
> :  $this->name = $iname;
> :  $this->children = array();
> :  $orgs[] = & $this; // Each Org is added to the array $orgs[]
> : }
> :
> : function prettyprint() {
> :   return "<".$this->name." has ".count($this->children)."
> : children >";
> : }
> :   } // end class Org
> :
> :  // Create three Orgs
> :  $apple = new Org("Apple");
> :  $banana = new Org("Banana");
> :  $cherry = new Org("Cherry");
> :
> :  // Arrange them hierarchically
> :  $apple->children[] = $banana;
> :  $banana->children[] = $cherry;
> :  $cherry->children[] = "none";
> : ?>
> :
> : 
> : 
> :  :
> :   echo($apple->prettyprint()."");
> :   echo($banana->prettyprint()."");
> :   echo($cherry->prettyprint()."");
> :
> :   echo($orgs[0]->prettyprint()."");
> :   echo($orgs[1]->prettyprint()."");
> :   echo($orgs[2]->prettyprint()."");
> : ?>
> : 
> : 
> :
> :
> : --
> : PHP General 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]


-- 
PHP General 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]




[PHP] object references lose local variables

2001-09-26 Thread a

I'd like to ask your help to figure out why PHP objects are stripped of
their local variables when you add the objects to an array.
Shouldn't these be references, not shallow copies?

The code below is a simple org chart.
I create three instances, each is added to a global array called orgs[].

Each instance has a child, but when you add them to orgs[]
they lose their children.
I used & to create a reference, not a copy, but the problem remains.

Please reply by email to [EMAIL PROTECTED],
but without the "-no-spam-please".

When run in PHP Version 4.0.6, I get this output.
Notice that $apple retains its local value of $children,
but the same object, pushed onto $orgs[0], loses its local value.

--- output web page










--- source code --
name = $iname;
 $this->children = array();
 $orgs[] = & $this; // Each Org is added to the array $orgs[]
}

function prettyprint() {
  return "<".$this->name." has ".count($this->children)."
children >";
}
  } // end class Org

 // Create three Orgs
 $apple = new Org("Apple");
 $banana = new Org("Banana");
 $cherry = new Org("Cherry");

 // Arrange them hierarchically
 $apple->children[] = $banana;
 $banana->children[] = $cherry;
 $cherry->children[] = "none";
?>



prettyprint()."");
  echo($banana->prettyprint()."");
  echo($cherry->prettyprint()."");

  echo($orgs[0]->prettyprint()."");
  echo($orgs[1]->prettyprint()."");
  echo($orgs[2]->prettyprint()."");
?>




-- 
PHP General 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]