Вопросы и ответы с собеседований по PHP
Вопросы и ответы с собеседований PHP-разработчиков. Типы данных в PHP, особенности синтаксиса, передача данных по ссылке, реализация парадигмы ООП, предназначение кавычек, устройство сортировки и сборки мусора, генераторы, трейты и многое другое.
Какие типы данных есть в PHP?
Хотя PHP это динамический язык, все же все данные в нем имеют четкие типы.
Скалярные типы:
- bool
- int
- float
(иногда встречается название double
что для php не имеет разницы)
- string
Смешанные типы:
- array
- object
- callable
- iterable
Специальные типы:
- resource
- null
Обязательно ли писать ?> в конце скрипта?
Для файлов, содержащих только PHP-код, закрывающий тег ?>
лучше не использовать. Он не требуется синтаксисом PHP и его пропуск предотвращает случайное включение в вывод конечных пробелов.
В чём разница между === и ==?
1 === 1: true
1 == 1: true
1 === "1": false
1 == "1": true
"foo" === "foo": true
Оператор ==
производит приведение операндов к одному типу перед сравнением.
Оператор ===
сравнивает операнды без приведения типов, как есть.
Что такое ссылка в PHP?
Ссылки в PHP - это средство доступа к содержимому одной переменной под разными именами. Они не похожи на указатели в C - например, вы не можете выполнять над ними адресную арифметику, они не являются реальными адресами в памяти и т.д. Вместо этого указатели в PHP - это псевдонимы в таблице имён переменных.
Как передать переменную по ссылке?
function foo(&$var)
{
$var++;
}
$a = 5;
foo($a);
// $a здесь равно 6
Вы можете передать переменную по ссылке в качестве аргумента в функцию, чтобы эта функция могла изменять значение переменной.
Замечание: В вызове функции отсутствует знак ссылки - он есть только в определении функции. Этого достаточно для корректной передачи аргументов по ссылке.
По ссылке можно передавать:
- Переменные, например
foo($a)
- Ссылки, возвращаемые функцией, например:
function foo(&$var)
{
$var++;
}
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
Для чего нужен ini__set()?
PHP позволяет изменять некоторые из настроек, приведенных в php.ini
, с помощью ini_set()
.
ini__set()
принимает два аргумента: первый — это имя параметра, который нужно изменить, а второй — его новое значение.
Данный код активирует настройку display_error
:
ini_set('display_errors', '1');
Нужно поместить приведенный выше код в начало скрипта, чтобы параметр оставался включенным до конца. Кроме того, значения, установленные через ini_set()
, применимы только к текущему скрипту.
Что такое интерфейс в PHP?
Интерфейс в PHP — это конструкция языка, описывающая абстрактный тип данных (АТД). АТД определяет набор операций (функций), независимых от конкретной реализации типа для манипулирования его значениями. На практике интерфейсы содержат определения функций (то есть описание их сигнатур) без их реализации.
Что такое абстрактный класс?
Абстрактный класс - это так называемый базовый класс, не предназначенный для создания его экземпляров (объектов). Основной смысл и назначение абстрактных классов заключается в расширении возможностей его дочерних классов.
Поддерживает ли PHP множественное наследование?
Нет, PHP не поддерживает множественное наследование. То есть у производного класса может быть только один родительский. Но с помощью “магической” функции __call()
его можно эмулировать.
Какие есть модификаторы доступа в PHP?
С помощью специальных модификаторов можно задать область видимости для свойств и методов класса. В PHP есть три таких модификатора:
public
: свойство, метод или конструктор будут доступны для всех классов, которые их используют.
protected
: может быть использован только в самом классе, а также в его дочерних.
private
: может быть использован только в самом классе и нигде больше.
Зачем нужен «static» в PHP?
1. Для объявления статической локальной переменной. 2. Для объявления статического свойства или метода класса. 3. Для реализации позднего статического связывания.