Что произойдёт если опустить "break" при написании варианта (case) в конструкции switch?
Anonymous Quiz
6%
Парсер PHP выдаст ошибку.
81%
Код продолжит выполнение внутри следующего case, что может привести к ошибкам.
0%
Браузер пользователя выдаст ошибку.
10%
Парсер, дойдя до следующего case, автоматически выйдет из switch-а
2%
Код продолжит выполнение внутри следующего case и выдаст ошибку.
1%
Не знаю
Какой результат выполнения следующего кода?
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
11%
[ArrayIterator]
13%
[5 6 7 8]
58%
[5 6 7]
2%
[ ]
8%
возникнет ParseError
7%
Не знаю
Что выведет код - echo var_dump($unsetVar); ?
Anonymous Quiz
6%
0
47%
NULL
11%
ничего не выведет
31%
возникнет ошибка
4%
Не знаю
Какая функция выведет "php"?
Anonymous Quiz
4%
a()
26%
b()
11%
c()
41%
b() и c()
17%
никакая, будет ParseError
Объяснение 👆 и спасибо за него автору канала @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();
}
3v4l.org
Online PHP editor | output for kpIIu
Run your php code online; get statistics, vld output and compare output from all versions.
Forwarded from BackendQuiz - задачи с собеседований по бэкенду
[REST] Одним из главных особенностей RESTFull является идемпотентность. Это так?
Anonymous Quiz
39%
Да
18%
Нет
26%
В определенных случаях
16%
Не знаю
Что выведет данный скрипт в результате своей работы?
Anonymous Quiz
70%
5
1%
0
7%
Ничего не выведет
21%
Выведет ошибку
0%
Не знаю