Yes, thanks, but then I can't pass a string or int as a parameter as well, which is what a want.
Neil Kimber wrote: > You're not passing by reference. > Change: > > function add($child) { > $this->children[] = $child; > } > > to > > function add(&$child) { > $this->children[] = &$child; > } > > This should work. When you pass an object as a parameter PHP makes a copy of > that object as a local instance in your method. So, your original code: > > 4 $obj2->add(", something else"); > 5 $obj1->add($obj2); > > would alter $obj2 and store a copy of that altered object in $obj1. But, > > 5 $obj1->add($obj2); > 4 $obj2->add(", something else"); > > would store a copy of unaltered $obj2 in $obj1. You'd then alter a different > instance of $obj2 in the succeeding line. > By using the suggested altered code at the top of this email, line 5 would > not pass a copy but would pass a reference to the actual instance of the > object. Note, you also have to ensure that you store a reference to this guy > in your array as by default adding items to arrays causes copies to be made. > So you also need the line: > > $this->children[] = &$child; > > Hope this helps. > > > >>-----Original Message----- >>From: Brian White [mailto:[EMAIL PROTECTED]] >>Sent: 17 October 2001 04:41 >>To: SafeV; [EMAIL PROTECTED] >>Subject: Re: [PHP] Object and reference problem >> >> >>I think you are going to have to live with it. >> >>Functional overloading only really makes sense in strongly typed >>languages, and I bet is a bugger to implement in a name based >>scripting language so I don't think you are goign to get it. >> >>What I have sometimes wished for was that all objects and arrays >>were passed around as pointers by default, with the ability >>to create a copy when required, but that is such a fundamental >>change that I doubt if it will happen, and there are probably >>goo reasons not to ( have I ever told people how much I like >>Python ... ) >> >>Maybe you are just going to have to bite the bullet and have >>an "AddRef" method...... >> >> >>At 04:28 17/10/2001 +0200, SafeV wrote: >> >>>Someone, have a go at this! >>> >>>I have encountered a very troublesome problem, which I don't see how to >>>solve in an elegant way, since PHP doesn't support method overloading. >>> >>>Suppose my class is, kind of a tree, like: >>> >>>class A { >>> var $children; >>> >>> function A() { >>> $this->children = array(); >>> } >>> >>> // I want this to accept both objects and strings etc. >>> // IE. mixed >>> function add($child) { >>> $this->children[] = $child; >>> } >>> >>> function printStuff() { >>> foreach ($this->children as $child) { >>> if (is_object($child)) >>> $child->printStuff(); >>> else >>> echo $child; >>> } >>> } >>>} >>> >>>Now this is fine: >>> >>>1 $obj1 = new A(); >>>2 $obj2 = new A(); >>>3 $obj1->add("Something"); >>>4 $obj2->add(", something else"); >>>5 $obj1->add($obj2); >>>6 $obj1->printStuff(); >>> >>>and prints out "something, something else" >>> >>>But if I swap lines 4 and 5 it only prints out "something". >>>Obviously, the add method of $obj1 only receives a copy of $obj2, and >>>if I try to add something to $obj2 afterwards, even thought it's >>> >>supposed >> >>>to be hooked with $obj1, it will "disappear". >>> >>>For objects only I could solve this with declaring add() like: >>>function add(&$child) { >>> $this->children[] = $child; >>>} >>>So it receives a reference of the object, but then I can't add a string >>>(fatal error, cannot pass string as reference), or an integer or double, >>>for that matter! And I really don't want to use different method names! >>> >>>I don't have full control over the reference stuff in PHP, does anyone >>>know how I can fix this? Or a workaround? >>> >>>Thanx! >>> >>> >>>-- >>>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] >>> >>------------------------- >>Brian White >>Step Two Designs Pty Ltd - SGML, XML & HTML Consultancy >>Phone: +612-93197901 >>Web: http://www.steptwo.com.au/ >>Email: [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 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]