Автоответчик

Записал новое приветствие на автоответчик: «Оставьте сообщение после гудка. „Гудка“».

2 комментария

Удивительный PHP. продолжение диалога.

Неужели мой пример с
$test = ’Test’;
list ($a, $b) = $test;

не показался интересным? Скажите, а вы уверены, что преобразование string <-> обычно для PHP? array_reverse(’Test’) выдаст ошибку ’a’==array(’a’) и array(’a’)==’a’ выдаст false, а array(’a’).’’ выдаст «Array». Вот вам примеры, где не происходит взаимное преобразование этих двух типов. А вы рассуждаете так, будто это обычное дело и вы каждый день с этим сталкиваетесь.

Дополнение. Подумал и решил, что есть ещё способ преобразовать строку в массив:

$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, если бы эта конструкция выполняла преобразование типов, было бы такое странное отношение к числам — выполнила бы преобразование и преобразовала число к массиву, как сделала это со строкой.

11 комментариев

Артемий Лебедев и

Две работы, попавшие в шот-лист конкурса, проводимого студией Артемия Лебедева («Эстафета олимпийского огня») оказались плагиатом www.artlebedev.ru/kovodstvo2/pkp/4/dope_test_positive/ Основа для них была заимстована из фильма «Аниматрица».

Мне верхний кадр сразу напомнил эпизод фильма, но подвоха я не заметил. А нижний из «Детективной истории» я пропустил — это мой нелюбимый эпизод.

1 комментарий

Ещё о 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;

2 комментария

Удивительный PHP. продолжение диалога II

Вот что мне ответил Derick из PHP developer team:

«It’s a side affect, I don’t think we should document this :-) (Also,
don’t rely on this behavior)»

На всякий случай переведу (выделение моё): «Это побочный эффект, я не думаю, что мы внесём его в документацию :-) (Кстати, лучше не полагаться на такое поведение в дальнейшем)»

2 комментария