Библиотека задач по PHP | тесты, код, задания
2.28K subscribers
330 photos
6 videos
169 links
Задачи и тесты по PHP для тренировки и обучения.

По рекламе: @tproger_sales_bot

Учиться у нас: clc.to/JE-DRA

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
❓ Почему второй foreach меняет последний элемент массива?

PHP 8.4. Что выведет код?

<?php

$values = [1, 2, 3];

foreach ($values as &$value) {
}

foreach ($values as $value) {
}

echo implode(',', $values);


👾 — 1,2,3
👍 — 1,2,2
🥰 — 3,3,3
⚡️ — Ошибка выполнения

Ответ: 👍 — 1,2,2.

После первого цикла $value остаётся ссылкой на последний элемент массива. Второй цикл присваивает ей очередные значения и тем самым меняет этот элемент. Чтобы убрать связь, после цикла по ссылке нужно вызвать unset($value).

Документация: foreach по ссылке

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
❓ Почему после фильтрации JSON-массив стал объектом?

PHP 8.4. Что выведет код?

<?php

$values = [0, 1, 2];
$filtered = array_filter(
$values,
fn($value) => $value > 0
);

echo json_encode($filtered), "\n";
echo json_encode(array_values($filtered));


👾 — [1,2], затем [1,2]
👍 — {"0":1,"1":2}, затем [1,2]
🥰 — {"1":1,"2":2}, затем [1,2]
⚡️ — {"1":1,"2":2}, затем тот же объект

Ответ: 🥰 — {"1":1,"2":2}, затем [1,2].

array_filter сохраняет ключи. После удаления нулевого элемента остаются ключи 1 и 2, поэтому json_encode создаёт объект. Функция array_values заново нумерует элементы с нуля — после неё получается JSON-массив.

Документация: array_filter • Документация: json_encode

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰6
❓ Найдёт ли in_array строку среди целых чисел?

PHP 8.4. Что выведет код?

<?php

$values = [10, 20];

var_dump(in_array('10', $values));
var_dump(in_array('10', $values, true));


👾 — false, затем false
👍 — true, затем true
🥰 — false, затем true
⚡️ — true, затем false

Ответ: ⚡️ — true, затем false.

По умолчанию in_array использует нестрогое сравнение: числовая строка '10' совпадает с числом 10. Третий аргумент true включает проверку типа. Строка и целое число тогда не совпадают.

Документация: in_array

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡6🥱2
❓ Пустая ли строка '0'?

PHP 8.4. Что выведет код?

<?php

$value = '0';

var_dump(empty($value));
var_dump($value === '');


👾 — true, затем false
👍 — false, затем false
🥰 — true, затем true
⚡️ — false, затем true

Ответ: 👾 — true, затем false.

Проверка empty считает строку '0' пустым значением, потому что при преобразовании в bool она даёт false. Строгое сравнение с '' проверяет именно пустую строку. Строка '0' содержит один символ, поэтому результат — false.

Документация: empty

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👾3
❓ Вызовется ли функция в аргументе после ?->?

PHP 8.4. Что выведет код?

<?php

function prepare(): int {
echo "prepare\n";
return 1;
}

$item = null;
$result = $item?->run(prepare());

var_dump($result);


👾 — prepare, затем NULL
👍 — Только NULL
🥰 — Ошибку вызова метода у null
⚡️ — Ничего

Ответ: 👍 — Только NULL.

Оператор ?-> останавливает вычисление, если слева находится null. До вызова метода и вычисления его аргументов дело не доходит. Поэтому prepare() не выполняется, а результат выражения равен null.

Документация: nullsafe operator

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3⚡1
❓ Почему self:: и static:: вызывают разные методы?

PHP 8.4. Что выведет код?

<?php

class Base {
public static function name(): string {
return 'B';
}

public static function show(): void {
echo self::name(), static::name();
}
}

class Child extends Base {
public static function name(): string {
return 'C';
}
}

Child::show();


👾 — BB
👍 — CC
🥰 — BC
⚡️ — CB

Ответ: 🥰 — BC.

self:: обращается к классу, в котором написан метод show, — это Base. Вызов через static:: учитывает класс, через который вызвали метод. Здесь это Child, поэтому выбирается его реализация name.

Документация: позднее статическое связывание

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰3⚡1
❓ Что выполнится раньше: сложение или склеивание строки?

PHP 8.4. Что выведет код?

<?php

echo "sum=" . 1 + 2;


👾 — 2
👍 — sum=12
🥰 — TypeError
⚡️ — sum=3

Ответ: ⚡️ — sum=3.

В PHP 8 оператор + имеет более высокий приоритет, чем точка. Выражение читается как "sum=" . (1 + 2). Сначала складываются числа, затем результат присоединяется к строке.

Документация: приоритет операторов

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡4👍2
❓ Попадёт ли return генератора в foreach?

PHP 8.4. Что выведет код?

<?php

function numbers(): Generator {
yield 1;
return 7;
}

$generator = numbers();

foreach ($generator as $value) {
echo $value, ' ';
}

echo $generator->getReturn();


👾 — 1 7
👍 — 1 7 7
🥰 — Только 1
⚡️ — Исключение при вызове getReturn()

Ответ: 👾 — 1 7.

Цикл получает значения, выданные через yield, — здесь только единицу. Значение из return хранится отдельно. После завершения генератора его можно получить методом getReturn().

Документация: Generator::getReturn

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👾2
👀 Сколько ключей останется после записей по 1, "1" и "01"?

PHP 8.4. Что выведет код?

<?php

$values = [
1 => 'A',
'1' => 'B',
'01' => 'C',
];

echo count($values), PHP_EOL;
echo $values[1], PHP_EOL;
echo $values['01'], PHP_EOL;


👾 — 3, A, C
👍 — 2, A, C
🥰 — 1, C, C
⚡️ — 2, B, C

Ответ: ⚡️ — 2, B, C.

Строковый ключ "1" преобразуется в целое число 1. Вторая запись перезаписывает значение A значением B.

Ключ "01" остаётся строкой: ведущий ноль мешает такому преобразованию. В массиве сохраняются два элемента.

Документация: преобразование ключей массива.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡4
🔴 Собес на PHP-разработчика с экс-лидом из Bumble в субботу в 15:00

7 ноября (в эту субботу!) в 15:00 МСК приходи онлайн на открытое собеседование. Посмотришь, как проходит настоящее интервью на Middle PHP-разработчика.

Как это будет:

📂 Глеб Виноградов, Staff Software Engineer в Ad Tyres International, ex-Lead в Bumble, проведёт собес. У Глеба больше 11 лет в разработке. В Bumble он 4 года писал бэкенд для приложений Bumble и Badoo;

📂 Глеб задаст реальные вопросы с технических секций и прокомментирует ответы;

📂 В конце можно будет задать ему любой вопрос.


Участие бесплатное. Эфир проходит в рамках менторской программы ШОРТКАТ для разработчиков, которые хотят сменить работу, повысить грейд и зарплату или прокачать навыки.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_php_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Какое значение сохранится при распаковке массивов с одинаковым ключом?

PHP 8.4. Что выведет код?

<?php

$defaults = ['theme' => 'light'];
$user = ['theme' => 'dark'];

$config = [...$defaults, ...$user];

echo $config['theme'];


👾 — dark
👍 — light
🥰 — lightdark
⚡️ — Возникнет ошибка из-за повторяющегося ключа

Ответ: 👾 — dark.

При распаковке массивов более позднее значение перезаписывает предыдущее с тем же строковым ключом.

Здесь настройки пользователя идут после настроек по умолчанию, поэтому theme получает значение dark.

Документация: распаковка массивов.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👾3