PHP задачи с собеседований
3.06K subscribers
473 photos
6 videos
11 files
368 links
Задачи, тесты и теоретические вопросы по PHP.

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Download Telegram
Для тех, кто хочет расти в PHP - онлайн-митап в эту субботу:
https://meetups-online.ru/php-may-2020

- обзор малоизвестных, но крутых инструментов статического анализа кода,

- опыт разработчиков Skyeng, iSpring и Lamoda,

- плюс история про трудоустройство в европейскую компанию.

А также много общения в перерывах голосом, приглашенные эксперты, розыгрыш лицензий от JetBrains и не только.

Сохраняйте ссылку на трансляцию: https://www.youtube.com/watch?v=ZYMEb_30kuo
Какой результат выполнения следующего кода?
Какой результат выполнения следующего кода?
Anonymous Quiz
26%
5 31 6.2
11%
4 31 7.5
4%
5 31 7
6%
5 31 6
50%
5 31 7.5
3%
Не знаю
[PHP 7.4] Что будет в переменной $arr?
Что выведет код?
Что выведет код?
Что выведет код?
Anonymous Quiz
32%
0
11%
1
50%
3
4%
7
3%
Не знаю
[PHP 7.4] Отработает ли данный код?
[PHP 7.4] Отработает ли данный код?
Anonymous Quiz
45%
Да
49%
Нет
6%
Не знаю
Что выведет код:
echo -1 == true; ?
Anonymous Quiz
36%
true
16%
1
10%
0
35%
false
3%
Не знаю
Какая функция выведет "php"?
Объяснение 👆 и спасибо за него автору канала @phpyh

Функция является функцией генератора только если она содержит хотя бы один yield (https://www.php.net/manual/ru/language.generators.syntax.php). Тип возвращаемого значения Generator не делает функцию функцией генератора.

Отличие обычной функции от функции генератора в том, что первая при обращении выполняется сразу, а вторая лишь возвращает обходимый объект со ссылкой на свой код (собственно, генератор). Код тела функции генератора начинает выполняться только в момент вызова любого метода генератора. Как правило, это происходит неявно при обходе генератора в цикле.

В предложенной задаче только a() и c() являются функциями генератора, и ни одна из них в этом скрипте так и не начнёт выполняться. Функция b() является обычной функцией и при обращении отработает синхронно: сначала выведет 'php', затем получит объект генератора от a() и вернет его незапущенным. https://3v4l.org/kpIIu

Данный нюанс может иметь очень большое значение. Например, при оборачивании генерирующего курсора в транзакцию.

Неправильно (подумайте, почему):
/**
* @psalm-param callable(): Generator $cursor
*/
transactionally(callable $cursor): Generator
{
$connection->beginTransaction();
$result = $cursor(); // try/catch/rollback опущены
$connection->commit();

return $result;
}


Правильно:
/**
* @psalm-param callable(): Generator $cursor
*/
transactionally(callable $cursor): Generator
{
$connection->beginTransaction();

yield from $cursor(); // try/catch/rollback опущены

$connection->commit();
}
[REST] Одним из главных особенностей RESTFull является идемпотентность. Это так?
Anonymous Quiz
39%
Да
18%
Нет
26%
В определенных случаях
16%
Не знаю
Поддерживается ли множественное наследование в PHP?
Anonymous Quiz
28%
Да
71%
Нет
1%
Не знаю
Что выведет данный скрипт в результате своей работы?