Sigh, I guess you're right... But I think a better solution is to wrap strings in a String object
Thanks for your input! Brian White wrote: > 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]