Hi Andi, Okay, it's not as simple as I thought it was - and you're correct, the behaviour has not changed for php4/5.
Objects in both PHP4 and PHP5 will throw an error if you use the method $blah[$someobject] = 'val'; (first method) Warning: Illegal offset type However, both do not throw an error if you use $blah = array($someobject => 'val'); (second method) When we compare this behaviour with resources, it gets interesting. A resource is casted to an interger when used as an array key for the first method, but not the second. This raises a number of questions: 1) Should the behaviour of method 1, and method 2 be the same. 2) Should the behaviour of objects be the same as resources (in the context of casting for use as an array key) Below is a sample script which shows the differences -------------------- <pre> <?php // Create a sample object class id_obj { var $_id; function id_obj($id) { $this->_id = $id; } } // Create two new objects $id1 = new id_obj(1); $id2 = new id_obj(2); // Add them to an array with two different methods $array = array(); $array[$id1] = 'sdf'; $array2 = array ($id1 => 'id1', $id2 => 'id2'); echo "objects: first method:\n"; var_dump($array); echo "objects: second method:\n"; var_dump($array2); // Create two resources $fp1 = fsockopen("www.example.com", 80, $errno, $errstr, 30); $fp2 = fsockopen("www.example.com", 80, $errno, $errstr, 30); // Add them to an array with two different methods $resarray = array(); $resarray[$fp1] = 'fp1'; $resarray2 = array($fp1 => 'fp1', $fp2 => 'fp2'); // Show the result echo "resources: first method:\n"; var_dump($resarray); echo "resources: second method:\n"; var_dump($resarray2); ?> </pre> -------------------- The output: ----------- Warning: Illegal offset type on line 9 objects: first method: array(0) { } objects: second method: array(0) { } resources: first method: array(1) { [2]=> string(3) "fp1" } resources: second method: array(0) { } -------------- Thanks. "Andi Gutmans" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > This code doesn't seem to have changed. Can you send me a 3-4 liner which > errors out in PHP 4 and not in PHP 4? > > Thanks, > > Andi > > At 11:03 PM 5/25/2004 +1000, Aidan Lister wrote: > >I'm going to go ahead and post this as a bug, unless there is a reason noone > >replied... > > > >"Aidan Lister" <[EMAIL PROTECTED]> wrote in message > >news:[EMAIL PROTECTED] > > > Hello devs, > > > > > > I'd like to discuss the use of objects as array keys. > > > > > > <?php > > > class idobject { > > > private $_id; > > > function __construct ($id) { $this->_id = $id; } > > > function __tostring () { return (int)$this->_id; } > > > } > > > > > > $blah1 = new idobject(1); > > > $blah2 = new idobject(2); > > > $blah3 = new idobject(3); > > > $blah4 = new idobject(4); > > > > > > $array = array ( > > > $blah1 => 'blah1', > > > $blah2 => 'blah2', > > > $blah3 => 'blah3', > > > $blah4 => 'blah4', > > > ); > > > > > > echo "<pre>"; > > > var_dump($array); > > > echo "</pre>"; > > > ?> > > > > > > In PHP4 this results in an error, > > > In PHP5 there is no error, the array is simply empty. > > > > > > An array key can only be a string/int, thus, when someone attempts to use > >an > > > array as a key would it not make sense to cast the object? > > > > > > This behaviour would then be consistant with resources. > > > > > > Regards, > > > Aidan > > > >-- > >PHP Internals - PHP Runtime Development Mailing List > >To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php