Greg Beaver <mailto:[EMAIL PROTECTED]> wrote on Monday, June 05, 2006 11:06
PM:

> You miss the point.  The warning that is helpful in debugging, it has
> nothing to do with designing things to break, it has to do with
> unintentional bugs.  If in 1 case of 1000 in a loop, there is
> an object
> instead of a string used as a key due to a bug (one example: this can
> easily happen if you forget to check for a PEAR_Error on return from a
> legacy PEAR class), a warning is printed.  With some kind of magic
> conversion, this warning will instead translate into a magic
> conversion to string, causing unpredictable and very
> difficult-to-track-down behavior.

Yes, that's all really good point! I'm -1 on this __toString() magical
behaviour, too. __toString should only be called in a *real* string
conversion as echoing and concatenating objects with strings etc.

Maybe someone mentioned that before, but did you look at Java? You can
use real objects as offset in "HashTable"s. In PHP it would look like
that:

class c {

        public function __toString() {
                return 'c';
        }
}

$o1 = new c;
$o2 = clone $o1;

$ar = array();
$ar[$o1] = 'Object 1';
$ar[$o2] = 'Object 2'; 

With __toString, the first array index gets overwritten. This is some
magic behaviour I don't like cause it's not intuitive. With the "Java
behaviour", the reference id or something similar would be used and you
could easily access these keys with:

var_dump($ar[$o1], $ar[$o2]);

Just my 2 cents ;)

-soenke
                                

Reply via email to