Все карточки
Расскажите о <?php ... ?>
все что знаете, в том числе различные особенности.
Это канонические теги PHP для обрамления кода. Основные особенности: лишние пробелы после закрывающего тега и использование коротких тегов.
Символы /* ... */
Расскажите об их использовании (включая документацию) и поддержке в версиях.
Это блочный комментарий, используется для многострочного текста: /* Комментарий */
. Не поддерживает вложенность - вызовит ошибку.
Вариант /** */
используется для документирования кода при помощи различных аннотации @param
@return
и др., но это не является фичей языка, а просто общепринятое соглашение.
Перечислите и кратко опишите основные атрибуты используемые в DocBlock.
Вот некоторые из основных атрибутов DocBlock:
@param
- описание параметра функции/метода.@return
- описание возвращаемого значения.@throws
- исключение, которые может выбрасывать метод.
Расскажите об использовании символов //
в PHP, включая нестандартные случаи.
Основное назначение: однострочный комментарий. Всё, что после //
и до конца строки, игнорируется.
Альтернатива: #
(решетка).
Не закрывается: Действует только до конца строки. Перенос строки — его “закрытие”.
Не работает в строке: Если // внутри кавычек — это часть строки, а не комментарий.
Также может использоваться для создание визуальных блоков.
microtime(bool $as_float = false): string|float
Расскажите об этой функции всё, что знаете.
Назначение: Возвращает текущее время в секундах и микросекундах. Для замеров скорости выполнения, генерации уникальных ID.
Параметры:
false
(по умолч.): строка"микросекунды секунды"
true
: числоfloat
(секунды.микросекунды
)
Особенности:
- Реальная точность зависит от ОС.
- Не является надежным источником абсолютного времени (часы могут сдвигаться).
define(string $constant_name, mixed $value, bool $case_insensitive = false): bool
Расскажите об этой функции всё, что знаете.
define()
создает именованную константу. Константы глобальны, неизменяемы и регистрозависимы. Могут содержать скаляры или массивы. Не используйте устаревший case_insensitive
. Отличие от const
: define()
работает в runtime, const
- в compile-time. Всегда называйте константы в UPPER_CASE.
Расскажите о символе ;
всё что знаете.
Точка с запятой ;
в PHP — обязательный разделитель инструкций. Он завершает команды, кроме последней перед закрывающим тегом ?>
или в файле без него. Не ставится после фигурных скобок {}
управляющих конструкций (if, for, function). Её пропуск вызывает фатальную ошибку парсинга. Также используется как разделитель внутри заголовка цикла for.
Расскажите об использовании запятой ,
в PHP.
Запятая в PHP — разделитель, а не оператор. Используется для:
- Аргументов функций (
func($a, $b)
) - Элементов массивов (
[1, 2]
) - Нескольких условий в
match
(case 200, 201 =>
) - Выражений в циклах
for
($i=0, $j=10;
) - Директив
declare
(strict_types=1, ticks=1
)
Нельзя использовать для объединения инструкций вместо ;
. Не возвращает значение, как в других языках.
Расскажите об использовании символа $
(знак доллара) в PHP.
Знак $
в PHP — обязательный префикс для имен переменных. Используется для:
- Объявления и использования переменных (
$var
). - Создания “переменных переменных” (
$$name
). - Интерполяции в строках (
"Hello, $name"
). - Доступа к свойствам объекта (
$obj->prop
).
Не используется для имен констант, классов или ключевых слов. Основа синтаксиса PHP.
Расскажите об использовании символа =
(знак равенства) в PHP.
Знак =
в PHP — это оператор присваивания (а не сравнения!). Он заносит значение из правой части в переменную слева. Возвращает присвоенное значение, что позволяет писать $a = $b = 0
.
Имеет комбинированные формы (+=
, .=
). Отличается от ==
(равно) и ===
(тождественно равно). Присваивание по ссылке делается оператором =&
.
Расскажите о булевой константе true
(истина).
true
— булева константа “истина”. Регистронезависима (но пишут true
). Тип — bool
, в числах это 1
, в строках — '1'
.
Много значений приводятся к true
в условиях (truthy): непустые строки (кроме '0'
), ненулевые числа, непустые массивы, объекты.
Строгое равенство (===
) проверяет именно тип bool
.
Расскажите о языковой конструкции require
.
require
— жёсткое включение PHP-файла. При ошибке (нет файла) — фатальная ошибка (E_COMPILE_ERROR), скрипт останавливается.
require_once
исключает повторное подключение. Подключённый код наследует область видимости с места включения.
Может возвращать значение через return
. Опасно использовать с пользовательским вводом (LFI-уязвимость).
Расскажите об использовании одинарных кавычек ''
.
Строки в одинарных кавычках ' '
не выполняют интерполяцию переменных ($name
выведется как есть) и спецсимволов (\n
останется \n
).
Экранировать нужно только саму кавычку \'
и обратный слеш \\
.
Идеальны для статического текста без переменных.
unset(mixed $var, mixed ...$vars): void
Расскажите об использовании языковой конструкции unset()
.
unset()
— уничтожает переменные, удаляя их из текущей области видимости. Работает с переменными, элементами массивов и public-свойствами объектов. Не переиндексирует массивы. Не удаляет глобальные переменные из функций без $GLOBALS
. Отличается от присваивания null
(уничтожение vs. обнуление). Не может удалить константы.
Расскажите об использовании символа .
(точка).
В PHP символ точки (.
) имеет три основные роли:
- Оператор конкатенации строк:
$a . $b
- Комбинированный оператор присваивания для конкатенации:
$a .= $b
- Разделитель целой и дробной части в числах:
3.14
Во многих веб-приложениях имеется файл index.php
внутри которого производится некоторая первоначальная настройка и в конце подключается файл, занимающимся дальнейшим запуском приложения. Как бы вы формализовали данную технику в веб-программировании?
Front Controller — паттерн с единой точкой входа (index.php
). Он принимает запросы, выполняет первичную настройку и делегирует обработку bootstrap.php
, который инициализирует ядро приложения (автозагрузку, контейнер, конфиги). Разделение обеспечивает гибкость, повторное использование кода и соблюдение SRP.
Опишите работу конструкции if-elseif-else
в PHP. Какие существуют нюансы при проверке условий и частые ошибки? Какие лучшие практики следует применять?
if-elseif-else
— базовая конструкция ветвления. Условие приводится к bool. elseif
и else if
синонимы. Для читаемости в HTML есть альтернативный синтаксис с endif
.
Всегда используйте строгое сравнение (===
), чтобы избежать неявного приведения типов. Остерегайтесь ошибки присваивания (=
) вместо сравнения.
Следуйте принципу раннего возврата для уменьшения вложенности.
Расскажите всё, что знаете об использовании в коде символов ( )
(круглые скобки).
Круглые скобки ()
в PHP используются для:
- Изменения приоритета операций
(2+2)*2
. - Вызова функций и методов
echo()
,$obj->method()
. - Объявления параметров функции
function name($param)
. - Определения условий конструкций
if()
,for()
. - Создания объектов
new Class()
и замыканий. - Группировки сложных логических выражений.
Расскажите всё, что знаете об использовании в коде символов { }
(фигурные скобки).
Фигурные скобки {}
в PHP определяют блоки кода (для if
, функций, классов). В строках с двойными кавычками явно задают границы переменной для устранения неоднозначности: {$array['key']}
, {$obj->prop}
. Устарели для доступа к элементам массива ($arr{1}
→ используйте $arr[1]
). Также используются для сложных имен переменных (${$name . '_' . $id}
).
Расскажите всё, что знаете об использовании в коде символов [ ]
(квадратные скобки).
Квадратные скобки []
в PHP — основной синтаксис для работы с массивами: объявление ($arr = [];
), доступ к элементу ($arr['key']
), добавление ($arr[] = value
).
С PHP 7.1 используются для деструктуризации массивов ([$a, $b] = $arr
). С PHP 5.6 — для доступа к элементу, возвращаемому функцией (getArray()[0]
).
Устаревший доступ через {}
($arr{'key'}
) удален в PHP 8+.
Расскажите всё, что знаете об использовании в коде символа !
(восклицательный знак).
Восклицательный знак !
в PHP — это оператор логического отрицания. Его ключевые роли:
- Инверсия логического значения:
!true => false
. - Часть операторов сравнения “не равно”:
!=
(нестрогое) и!==
(строгое). Всегда предпочтительнее использовать!==
.
isset(mixed $var, mixed ...$vars): bool
Расскажите об этой языковой конструкции всё, что знаете.
isset()
— это безопасный способ проверить существование переменной, ключа массива или свойства объекта без генерации предупреждений.
Она возвращает false
только в двух случаях: если переменная не существует или если её значение равно null
. Не путайте с empty()
(проверяет на “falsey”) и is_null()
(проверяет строго на null
).
defined(string $constant_name): bool
Расскажите об этой функции всё, что знаете.
defined()
— это функция для проверки существования константы (объявленной через define()
или const
или перечисления enum). Она возвращает true
или false
и не генерирует ошибок для несуществующих констант. Стандартная практика — использовать if (!defined('NAME'))
перед define('NAME', value)
для избежания дублирования.
Расскажите про предопределенная константу в PHP DIRECTORY_SEPARATOR
.
DIRECTORY_SEPARATOR
— это кроссплатформенная константа, содержащая символ-разделитель пути для текущей ОС (\
для Windows, /
для Linux).
- Исторически использовалась для ручной сборки путей.
- В современном PHP чаще всего не нужна для стандартных операций с файлами внутри PHP (вроде
require
илиfopen
). - Критически важна при взаимодействии со внешним миром (другими программами, системными вызовами) или при разборе путей, полученных из системных функций.
Расскажите про магическую константу в PHP __DIR__
.
__DIR__
— это магическая константа, возвращающая абсолютный путь к директории текущего файла. Её главное преимущество — создание надежных абсолютных путей для подключения файлов, что делает код независимым от текущей рабочей директории. Это обязательный инструмент для создания качественного, переносимого и надежного PHP-кода. Всегда предпочтительнее использовать __DIR__
вместо относительных путей или dirname(__FILE__)
.
realpath(string $path): string|false
Расскажите об этой функции всё, что знаете.
realpath()
— это мощная функция для нормализации и верификации путей. Она преобразует любой путь в абсолютный, убирая избыточность, разрешая относительные переходы (..
) и симлинки, и проверяя существование конечного файла/директории. Критически важна для безопасности при работе с динамически формируемыми путями.
Расскажите об использовании цикла foreach
.
foreach
— самый мощный и безопасный цикл для работы с массивами и объектами. Ключевые особенности: работа с копией массива, поддержка ссылок для модификации, распаковка массивов, работа с генераторами. Важно помнить про необходимость unset()
после итерации по ссылке и понимать разницу между работой с копией и оригиналом массива.
Проанализируйте технику инициализации констант, при которой их имена и значения задаются в массиве, а затем динамически определяются через цикл foreach
с проверкой defined()
. Каковы преимущества и недостатки такого подхода? В каких ситуациях его использование оправдано, а в каких — нет?
Это техника динамического определения констант через массив. Плюсы: DRY, централизация, гибкость добавления новых констант. Минусы: Меньшая явность, сложнее отладка, зависимость от порядка элементов. Оправдано для инициализации однотипных инфраструктурных констант (пути, настройки). Не оправдано для бизнес-логики с сложной инициализацией. Техника допустима, но требует аккуратности.
Объясните, как пространства имён (namespace
) решают проблему конфликта имён в PHP. Опишите механизмы импорта (use
, as
) и обращения к элементам из разных пространств имён. Каковы особенности использования функций и констант в контексте пространств имён?
namespace
— ключевой механизм для организации кода и предотвращения конфликтов. Основные концепции:
- Иерархическая структура с разделителем
\
- Три типа имен: полные, относительные, неполные
- Директивы
use
иas
для импорта и псевдонимов - Разное поведение для классов, функций и констант
- Интеграция с автозагрузкой через PSR-4
Понимание namespaces критически важно для работы с современными PHP-фреймворками и библиотеками.
Расскажите о булевой константе false
(ложь).
false
— булева константа “ложь”. При нестрогом сравнении (==
) равна нулю, пустой строке, null
, пустому массиву и строке '0'
. При строгом (===
) — только сама себе. Критически важно использовать ===
при проверке возврата функций вроде strpos()
.
В каких конструкциях PHP используется ключевое слово as
и какую роль оно выполняет?
Ключевое слово as
в PHP используется для:
1) Создания псевдонимов в use
(для классов, функций)
2) Разделения массива и переменных в foreach
3) Изменения видимости методов в трейтах
Создает альтернативные имена или связи между сущностями.
Расскажите об использовании символа >
(знак больше) в PHP.
Символ >
в PHP — оператор сравнения «больше». В комбинации ->
используется для доступа к свойствам и методам объекта. Также является частью оператора побитового сдвига >>
и закрывающего тега ?>
. Контекст определяет его функцию.
Расскажите об использовании двойных кавычек ""
.
Строки в двойных кавычках "..."
выполняют интерполяцию: подставляют значения переменных ("Привет, $name!"
) и спецсимволы (\n
, \t
). Для сложных выражений используйте фигурные скобки ({$user->name}
). Разница в производительности с одинарными кавычками минимальна.
Опишите назначение массива $_SERVER
. Какие его элементы наиболее важны для реализации роутинга, определения среды выполнения и обеспечения безопасности? Какие данные из этого массива считаются ненадежными и почему?
$_SERVER
— суперглобальный массив с данными о сервере и HTTP-запросе. Ключевые элементы: REQUEST_METHOD
, REQUEST_URI
, HTTP_HOST
, REMOTE_ADDR
.
Использование: роутинг, определение среды (dev/prod), логирование, безопасность (проверка HTTPS). Данные из заголовков (HTTP_*
) ненадежны — их можно подделать. Всегда проверяйте существование ключей.
В каких конструкциях PHP используется оператор =>
и какую роль он выполняет?
=>
в PHP — оператор связи «ключ-значение». Основное использование: объявление ассоциативных массивов (['key' => 'value']
). Также применяется в match-выражениях (case => result
), стрелочных функциях (fn() => ...
) и генераторах (yield key => value
).
Опишите принцип работы оператора ==
в PHP. Как изменилось сравнение строк и чисел в PHP 8+? Почему рекомендуется использовать ===
?
==
— оператор нестрогого сравнения. В PHP 8+ сравнивает значения с умным приведением типов: 0 == "0"
→ true
, но 0 == "abc"
→ false
. Всегда есть риск неочевидного поведения. Рекомендуется использовать строгое сравнение ===
.
Опишите принцип работы оператора and
в PHP. В чём ключевое отличие and
от &&
?
and
— это логический оператор “И” с низким приоритетом (ниже чем у присваивания =
). Его ключевое отличие от &&
— в порядке выполнения операций. Из-за этого $result = true and false
присваивает true
, а не false
. Рекомендуется использовать &&
в большинстве случаев, а при использовании and
— явно указывать порядок скобками.
Что представляет собой оператор ::
в PHP и в каких ситуациях он применяется?
::
— оператор доступа к статическим свойствам, методам и константам класса. Используется с ClassName::
, self::
, parent::
и static::
. Ключевое отличие от ->
: работает со статическим контекстом, а не с экземплярами объектов. Позволяет реализовать позднее статическое связывание.
date_default_timezone_set(string $timezoneId): bool
Расскажите об этой функции всё, что знаете.
date_default_timezone_set()
— критически важная функция для корректной работы с датами и временем. Она устанавливает часовой пояс по умолчанию для всех date-функций. Всегда вызывайте её явно в начале скрипта, чтобы избежать неожиданного поведения из-за разницы часовых поясов сервера и приложения. Используйте идентификаторы из базы Olson (Europe/Moscow
, UTC
и т.д.). Для более гибкого управления используйте объекты DateTime
с их индивидуальными часовыми поясами.
set_exception_handler(callable $callback): ?callable
Расскажите об этой функции всё, что знаете.
set_exception_handler()
— это механизм “последней линии защиты” для перехвата непойманных исключений. Она гарантирует, что даже если разработчик забыл обернуть код в try/catch
, исключение будет корректно обработано — залогировано, и пользователь увидит адекватное сообщение вместо белого экрана. Критически важный инструмент для создания отказоустойчивых приложений.
Расскажите о ключевом слове function
всё, что знаете.
Ключевое слово function
— основа функционального программирования в PHP. Оно используется для:
- Объявления именованных функций и методов классов
- Создания анонимных функций и стрелочных функций
- Определения генераторов и callback-ов
- Реализации рекурсивных алгоритмов
set_error_handler(callable $callback, int $error_levels = E_ALL): ?callable
Расскажите об этой функции всё, что знаете.
set_error_handler()
— мощный инструмент для кастомной обработки не-фатальных ошибок PHP. Она позволяет:
- Логировать ошибки в нужном формате
- Преобразовывать ошибки в исключения
- Гибко настраивать отображение ошибок для разных окружений
- Создавать единую систему обработки ошибок в приложении
register_shutdown_function(callable $callback, mixed ...$args): void
Расскажите об этой функции всё, что знаете.
register_shutdown_function()
регистрирует функцию, которая выполняется после завершения скрипта, даже при фатальных ошибках или exit(). Используется для обработки фатальных ошибок (через error_get_last()
), гарантированного освобождения ресурсов и финального логирования.
error_reporting(int $level): int
Расскажите об этой функции всё, что знаете.
error_reporting()
— dual-функция для управления тем, какие типы ошибок PHP будет регистрировать. Критически важно понимать разницу между ней и настройками отображения ошибок. Используйте битовые маски для точного контроля уровня отчетности в разных окружениях. Никогда не отключайте полностью в продакшене — вместо этого настраивайте логирование.
ini_set(string $option, string $value): string|false
Расскажите об этой функции всё, что знаете.
ini_set()
динамически изменяет настройки PHP во время выполнения скрипта. Возвращает предыдущее значение. Действует только на текущий скрипт, не все директивы можно изменить. Используется для временной настройки лимитов, ошибок, буферизации. Всегда проверяйте возвращаемое значение.
Расскажите о ключевом слове array
всё, что знаете.
array
— конструктор массивов (array(1, 2)
), тип данных и type hint. С PHP 5.4 рекомендуется использовать короткий синтаксис []
. Применяется для объявления констант-массивов, свойств классов и в type hints (function test(array $data)
).
Расскажите об использовании символа &
(амперсанд).
Символ &
в PHP создает ссылки на переменные ($b = &$a
). Используется для передачи/возврата по ссылке в функциях, побитовых операций (&
, &=
), и модификации элементов в foreach
. Всегда делайте unset()
после циклов со ссылками.
Расскажите об использовании оператора !==
.
!==
— оператор строгого неравенства. Проверяет, что значения ИЛИ типы операндов различны. Критически важен для сравнения с false
(strpos()
возвращает 0
или false
). Всегда предпочтительнее !=
, так как исключает неявное приведение типов.
Опишите принцип работы оператора switch
в PHP, его основные особенности.
switch
— оператор множественного ветвления. Использует нестрогое сравнение (==
). Без break
выполнение “проваливается” в следующий case
. Группировка case’ов позволяет выполнять один блок для нескольких значений. В PHP 8+ предпочтительнее использовать match
.
Что представляет собой суперглобальный массив $_GET
в PHP, как он формируется и какие основные меры безопасности необходимо соблюдать при работе с ним?
$_GET
— суперглобальный массив с параметрами URL-строки. Все значения — строки, контролируются пользователем, поэтому опасны. Всегда проверяйте (isset()
, ??
), валидируйте и экранируйте (htmlspecialchars()
) данные. Не используйте для чувствительной информации.
Что представляет собой суперглобальный массив $_POST
в PHP, как он формируется и какие основные меры безопасности необходимо соблюдать при работе с данными из форм?
$_POST
— суперглобальный массив для данных из HTTP POST-запросов (обычно формы). Все значения — строки. Не виден в URL, но так же опасен — требует валидации, экранирования и проверки CSRF. Всегда проверяйте REQUEST_METHOD === 'POST'
.
Что представляет собой суперглобальный массив $_COOKIE
в PHP, как он формируется и какие критические меры безопасности необходимо соблюдать при работе с ним?
$_COOKIE
— суперглобальный массив с HTTP cookies от браузера. Все значения — строки, легко подделываются клиентом. Никогда не доверяйте важным данным из кук. Всегда проверяйте (??
), валидируйте и экранируйте. Используйте для настроек, не для авторизации.
Что представляет собой суперглобальный массив $_REQUEST
в PHP, какие проблемы безопасности связаны с его использованием и почему его следует избегать в современной разработке?
$_REQUEST
— суперглобальный массив, объединяющий данные $_GET
, $_POST
и $_COOKIE
. Опасен из-за неопределенности источника данных. Не рекомендуется к использованию — всегда указывайте явный источник ($_GET
/$_POST
) для безопасности.
Расскажите об использовании символа :
(одиночное двоеточие) в PHP.
:
в PHP используется для: альтернативного синтаксиса (if: ... endif
), объявления возвращаемых типов (function(): type
), тернарного оператора (a ? b : c
).
Для чего используется ключевое слово break
в PHP, в каких конструкциях оно применяется?
break
прерывает выполнение циклов (for
, while
, foreach
) и предотвращает “проваливание” в switch
. С аргументом break 2
выходит из вложенных циклов. Критически важен в switch
для изоляции case’ов. Отличается от continue
(переход к следующей итерации).
parse_str(string $string, array &$result): void
Расскажите об этой функции всё, что знаете.
parse_str()
парсит строку запроса (name=John&age=30
) в переменные. Без второго параметра опасно — создает переменные в глобальной области. Всегда используйте с массивом: parse_str($query, $result)
. Автоматически URL-декодирует значения и поддерживает массивы.
file_get_contents(string $filename, bool $use_include_path = false,
resource $context = ?, int $offset = 0,
int $length = ?): string|false
Расскажите об этой функции всё, что знаете.
file_get_contents()
читает весь файл или URL в строку. Работает с локальными файлами и HTTP (если включен allow_url_fopen
). Можно настроить через stream context. Возвращает строку или false
при ошибке. Не подходит для больших файлов — использует много памяти.
Что представляет собой поток php://input
в PHP, как он используется и в каких сценариях его применение предпочтительнее работы с суперглобальным массивом $_POST
?
php://input
— поток для чтения сырого тела HTTP-запроса. Используется через file_get_contents('php://input')
. Идеален для JSON/XML API. Не работает с multipart/form-data
(загрузка файлов). Возвращает данные как есть, без парсинга, в отличие от $_POST
.
is_null(mixed $value): bool
Расскажите об этой функции всё, что знаете.
is_null()
проверяет, равна ли переменная null
. Возвращает true
только для null
. Генерирует Notice для необъявленных переменных — это главная опасность. Функционально эквивалентна === null
, но медленнее. Всегда используйте isset()
перед проверкой необъявленных переменных.
count(Countable|array $value, int $mode = COUNT_NORMAL): int
Расскажите об этой функции всё, что знаете.
count()
подсчитывает элементы массива или Countable-объекта. Поддерживает два режима: COUNT_NORMAL
(первый уровень) и COUNT_RECURSIVE
(включая вложенные). Для других типов возвращает 1 с Warning. sizeof()
— псевдоним count(). Всегда проверяйте тип перед использованием.