Andi, any interest in this? "Aidan Lister" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > 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
