PHP array and object addition and string indexing

While reading someone’s code, I came across the following sort of thing:


function foo($config = array()) {

$this->_config += $config;
//...
}

To which I thought WTF? How does PHP cast an array to a number to perform addition?

A few random tests later, it appears PHP joins the two arrays together, only adding indexes that appear in the second (and not first) array.

(as per php manual – array operators)

Namely :

$array_1 = array(‘a’,’b’, 4=>’c’);
$array_2 = array(4=>’e’, ‘f’, ‘g’);

$array_1 += $array_2;

print_r($array_1);

will give :
Array
(
[0] => a
[1] => b
[4] => c
[5] => f
[6] => g
)

(Note; 4=>e is not in the resultant array, because 4=>c was in array_1).

After a round about conversation with Moobert on this on IRC – at which point he probably put me out of my misery, he also gave me the following :

$x = ‘test’;
echo $x[‘whatever’]; // outputs ‘t’

Which I can understand – as PHP allows for per-character access to a string (based on position) – hence ‘something’ gets casted to zero, and we get the first character back.

I know I can cast objects to arrays, and vice versa.

Seemingly Objects don’t follow any sort of ‘union’ rule however… as adding two objects results in ‘2’. Not sure how PHP converts an object into ‘1’… but there we are. I sort of expected to get an object back (assuming the inputs were the same type) with a union of properties, but no.