Хабрахабр

Пятничная PHP-викторина: немного приключений программиста Брэда, одна странная последовательность и призы

Привет! Обещали — делаем: продолжаем серию мини-квизов, посвященных разным языкам программирования в нашем блоге (предыдущие: 1 (на знание Python, PHP, Golang и DevOps), 2 (полностью по Go)). Сегодняшний выпуск посвящён PHP.

Квиз проходит до 4 июля. Под катом — восемь вопросов, немного приключений программиста Брэда, одна странная последовательность и клёвый мерч в качестве призов.

Правила игры

Первому, кто правильно ответит на них, отправим набор сувенирки Авито: футболку с php-слоном, носки и холиварные кости (можно будет погадать, на каком бэкенд-языке и фронтенд-фреймворке будет написан ваш новый проект).

Разыграем с помощью рандомайзера. Десяти другим правильно ответившим отправим Авито-носки. Он же определит, к кому поедут ещё две футболки и набор костей.

Вопросы и варианты ответов

Вопрос 1

Что выведет код:

<?php
$a = [1, 2, 3];
foreach($a as &$value)
foreach($a as $value) {} print_r($a);

Варианты ответов:

  1. Array(1, 2, 3)
  2. Array(1, 2, 2)
  3. Array(3, 2, 1)
  4. Ошибка

Вопрос 2

Что выведет код:

<?php
function sowCrops() { return 'wheat'; }
function millWheat() { return 'flour'; }
function bake($flour) { return 'cupcake'; }
function generator() { $flour = yield millWheat(); $wheat = yield sowCrops(); return bake($flour);
};
$gen = generator();
foreach ($gen as $key => $value) { echo $key . ' => ' . $value . PHP_EOL;
}
echo $gen->getReturn();

Варианты ответов:

  1. 0 => flour 1 => wheat

  2. 0 => wheat 1 => flour 2 => cupcake

  3. 0 => flour
    1 => wheat
    cupcake

  4. cupcake

Вопрос 3

Однажды программист Брэд решил портировать одну библиотеку с Go на PHP, чтобы собрать звёзд на GitHub, и задался вопросом:

Возможна ли следующая конструкция?

<?php print_r(...(new Foo()));

Варианты ответов:

  1. Да, класс Foo должен реализовать интерфейс Traversable
  2. Да, класс Foo должен реализовывать методы интерфейса ArrayAccess
  3. Нет, будет ошибка, аргумент ...-оператора должен быть массивом

Вопрос 4

Какой алгоритм сортировки используется в сердце PHP для таких функций, как sort и тд?

Варианты ответов:

  1. нерекурсивный mergesort
  2. heapsort (вариация smoothsort Эдсгера Дейкстры)
  3. quicksort с разбиением по медиане из трех
  4. introsort

Вопрос 5

Есть код:

<?php
class Factory { public function getLambda(): Closure { return function () { printf("Here I am (%s)!\n", get_class($this)); }; } public function getLambda2(): Closure { return static function () { printf("Here I am (%s)!\n", get_class($this)); }; }
}

Вопрос: есть ли разница между возвращаемыми значениями getLambda и getLambda2?

Варианты ответов:

  1. В одном случае использовано ключевое слово static :), но оно никак не влияет
  2. Результат getLambda2() нельзя привязать к какому-нибудь объекту
  3. Так нельзя писать: будет синтаксическая ошибка «Syntax error: static keyword used in wrong context»
  4. Closure из getLamda2() можно привязывать (bindTo) только к классам

Вопрос 6

Что выведет код:

<?php $a = true;
$b = false; $c = $a and $b;
$d = $a && $b; var_dump($c);
var_dump($d);

Варианты ответов:

  1. bool(false)
    bool(false)

  2. bool(false)
    bool(true)

  3. bool(true)
    bool(true)

  4. bool(true)
    bool(false)

Вопрос 7

Что выведет код:

<?php $a = 'a'; for ($i = 0; $i < 40; $i++) { echo $a++, PHP_EOL;
}

Варианты ответов:

  1. Будут выведены цифры от 0 до 39, а также Warning: A non-numeric value encountered in на каждой итерации
  2. Каждая итерация выведет ‘a’ + Warning
  3. Странная последовательность:

    a
    b
    c
    d
    e
    f
    g
    h
    i
    j
    k
    l
    m
    n
    o
    p
    q
    r
    s
    t
    u
    v
    w
    x
    y
    z
    aa
    ab
    ac
    ad
    ae
    af
    ag
    ah
    ai
    aj
    ak
    al
    am
    an

Вопрос 8

Что выведет код:

<?php class TestMe { public function test() { if (0) { yield 32332; } return [1,2,3]; }
} $t = new TestMe(); foreach ($t->test() as $id) { echo $id, PHP_EOL;
} echo "The end", PHP_EOL;

Варианты ответов:

  1. 1
    2
    3
    32332
    The end

  2. 1
    2
    3
    The end

  3. The end

  4. 32332
    The end

Подведение итогов

Ответы на вопросы выложим апдейтом к посту в среду, 4 июля. Если будете решать — кладите ответы под спойлер, чтобы не портить другим фана. И не забывайте проверять личку Хабра после окончания квиза.

Enjoy!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть