Вот этот перечень "особенностей" считаю надо знать наизусть любому, кто хочет с пользой что-то делать на этом псевдоязыке: http://habrahabr.ru/post/142140/
Из неожиданного поведения:
// как известно, функция может получать параметр разного типа (mixed):
function myFunc( $param ) {
if( !empty($param['myKey']) ) {
echo 'param-mykey is not empty';
} else {
echo 'param-mykey is empty or not present';
}
return;
}
// 1-й вызов:
myFunc( array('myKey1'=>123) ); // ... is empty or not present
// 2-й вызов:
myFunc( '123' ); // ... is not empty! при этом $param['myKey'] будет равно 1!
Неожиданно, не правда ли? А всё объяснимо и достаточно просто:
1. В PHP строка есть массив, соответственно вполне допустимо $param['myKey']...
2. Идентификатора (ключа) myKey в псевдомассиве интерпретатор есстественно НЕ находит и поскольку false эквивалентен 0, то ноль и возвращается как номер элемента массива.
3. Ошибки не возникает по причине того, что любая переменная может быть объявлена "на ходу" по мере необходимости.
4. А вот псевдомассив - строка, как раз имеет элемент с номером 0. Значение которого и равно в данном примере 1.
В ряде случаев может породить весьма неприятное поведение...
"Только так, только личная инициатива и напряженная работа над собой. .. Нужно своей собственной рукой все делать" (с) В.В. Путин(а не на "вертикаль власти" надеяться)