Библиотека собеса по PHP | вопросы с собеседований
3.36K subscribers
139 photos
2 videos
69 links
Вопросы с собеседований по PHP и ответы на них.

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

Учиться у нас: https://proglib.io/w/9f3affba

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Расскажите об обработке ошибок и исключения (try catch, finaly и throw).

Обработка ошибок и исключений в PHP осуществляется с помощью конструкции try-catch-finally и оператора throw.

1. Конструкция try-catch-finally:
- Код, который может вызывать исключение, помещается внутри блока try.
- Если исключение происходит внутри блока try, то программа переходит в соответствующий блок catch.
- Блок catch содержит код, выполняемый в случае возникновения исключения. Он принимает один параметр — само исключение.
- Блок finally является необязательным и содержит код, который выполняется в любом случае, независимо от того, было ли исключение или нет.

2. Оператор throw:
- Оператор throw используется для создания исключения.
- Он позволяет выбросить исключение вручную, указав класс исключения или объект исключения.
- Класс исключения может быть предопределенным классом, таким как Exception, или пользовательским классом, унаследованным от встроенного класса Exception.

Таким образом, использование конструкции try-catch-finally и оператора throw позволяет обрабатывать ошибки и исключения в PHP, обеспечивая контроль над выполнением программы и выводом информации об ошибках для более качественной отладки и управления кодом.
Что такое Bundles в Symfony?

В Symfony, Bundle (Бандл) — это структурированный набор файлов и директорий, реализующих определённую функцию или набор связанных функций в приложении Symfony. Бандлы являются основными единицами организации в проекте Symfony, позволяя упаковывать повторно используемый код и делиться им между несколькими проектами.

Вот некоторые ключевые аспекты бандлов в Symfony:

1. Структура и организация
Бандлы предоставляют способ организовать код в логические единицы. Каждый бандл обычно включает:

✔️Контроллеры
✔️Модели/Сущности
✔️Сервисы
✔️Конфигурационные файлы
✔️Шаблоны (файлы Twig)
✔️Информацию о маршрутах

2. Повторное использование
Бандлы могут быть повторно использованы в разных проектах Symfony. Это упрощает совместное использование и распространение функций и функциональных возможностей, способствуя модульности и поддерживаемости.

3. Разделение
Бандлы помогают разделить различные части приложения. Это разделение гарантирует, что изменения в одном бандле не влияют на функциональность других, что облегчает обслуживание и разработку.

4. Сторонние бандлы
У Symfony есть богатая экосистема сторонних бандлов, доступных через такие платформы, как Packagist. Эти бандлы можно легко интегрировать в ваш проект для добавления различных функций, таких как аутентификация пользователей, обработка платежей или интеграция с API.

5. Конфигурация
Бандлы могут быть настроены с помощью файлов конфигурации YAML, XML или PHP. Это позволяет настроить поведение бандла в соответствии с потребностями вашего приложения.

6. Лучшие практики
Symfony рекомендует использовать стандартную структуру директорий для бандлов, которая включает:

Controller/: Содержит классы контроллеров.
Resources/config/: Содержит конфигурационные файлы.
Resources/views/: Содержит шаблоны Twig.
Resources/public/: Содержит общедоступные ресурсы, такие как CSS и JavaScript файлы.
DependencyInjection/: Содержит классы и конфигурации, связанные с внедрением зависимостей.
Entity/: Содержит классы сущностей Doctrine.
Почему php -r «echo (int) ((0.1+0.7)*10);» выводит 7, а не 8?

В PHP выражение php -r «echo (int) ((0.1 + 0.7) * 10);» выводит 7 вместо ожидаемого 8 из-за особенностей представления чисел с плавающей точкой в компьютерах. Числа, такие как 0.1 и 0.7, не могут быть точно представлены в двоичной системе, что приводит к небольшим погрешностям при вычислениях. В данном случае, результат выражения (0.1 + 0.7) * 10 может быть немного меньше 8, например, 7.999999999999999, и при приведении к целому типу ((int)) дробная часть отбрасывается, давая результат 7.

Рекомендуемые подходы для получения ожидаемого результата:

Округление перед приведением к целому числу:

Используйте функцию round() для округления значения до ближайшего целого перед приведением к типу int:
echo (int) round((0.1 + 0.7) * 10); // выводит 8


Форматирование с заданной точностью:

Примените функцию sprintf() для форматирования числа с определённой точностью перед приведением:
echo (int) sprintf('%.0f', (0.1 + 0.7) * 10); // выводит 8


Использование математических функций произвольной точности:

Для повышения точности вычислений можно использовать функции из расширения bcmath:
echo bcmul(bcadd('0.1', '0.7', 1), '10', 0); // выводит 8