Автоответчик
Удивительный PHP. продолжение диалога.
$test = ’Test’;
list ($a, $b) = $test;
не показался интересным? Скажите, а вы уверены, что преобразование string
Дополнение. Подумал и решил, что есть ещё способ преобразовать строку в массив:
$a = ’Test’;
settype($a, ’array’);
var_dump($a);
В этом случае мы получаем массив с элементом ’Test’, что противоречит теории, что в list происходит преобразование типов. Кстати:
$a = array(’a’,’b’,’c’);
settype($a, ’string’);
var_dump($a);
Выдаст notice: «Array to string conversion», что подтверждает, что преобразование строки в массив ничего общего с typeless PHP не имеет.
Ещё одно дополнение. list, по всей видимости, не выполняет преобразования, а просто умеет работать со строками. Аргументов тому два:
1) естественное для PHP преобразование string -> array это создать массив со строкой в качестве элемента этого массива, а не массив, где элементами будут буквы строки. Это легко увидеть, если использовать settype.
2) другое доказательство — следующий код:
$test = 411;
list ($a,$b) = $test;
в обеих переменных будет NULL. Сомневаюсь, что у list, если бы эта конструкция выполняла преобразование типов, было бы такое странное отношение к числам — выполнила бы преобразование и преобразовала число к массиву, как сделала это со строкой.
Артемий Лебедев и
Мне верхний кадр сразу напомнил эпизод фильма, но подвоха я не заметил. А нижний из «Детективной истории» я пропустил — это мой нелюбимый эпизод.
Ещё о list
$a = list ($b, $c) = array (1,2);
list ($a, $b) = list ($c, $d) = array(1,2);
и что будет если сделать вот так:
$a = array(1, 2);
list ($a[], $a[]) = $a;
Удивительный PHP. продолжение диалога II
«It’s a side affect, I don’t think we should document this
don’t rely on this behavior)»
На всякий случай переведу (выделение моё): «Это побочный эффект, я не думаю, что мы внесём его в документацию