1032 просмотра
от 4 июня 2024
PHP

Вопросы и ответы с собеседований по PHP

Вопросы и ответы с собеседований PHP-разработчиков. Типы данных в PHP, особенности синтаксиса, передача данных по ссылке, реализация парадигмы ООП, предназначение кавычек, устройство сортировки и сборки мусора, генераторы, трейты и многое другое.

1

Какие типы данных есть в PHP?

Хотя PHP это динамический язык, все же все данные в нем имеют четкие типы. Скалярные типы: - bool - int - float (иногда встречается название double что для php не имеет разницы) - string Смешанные типы: - array - object - callable - iterable Специальные типы: - resource - null

Комментарии
0/3000
2

Обязательно ли писать ?> в конце скрипта?

Для файлов, содержащих только PHP-код, закрывающий тег ?> лучше не использовать. Он не требуется синтаксисом PHP и его пропуск предотвращает случайное включение в вывод конечных пробелов.

Комментарии
0/3000
3

В чём разница между === и ==?

1 === 1: true 1 == 1: true 1 === "1": false 1 == "1": true "foo" === "foo": true Оператор == производит приведение операндов к одному типу перед сравнением. Оператор === сравнивает операнды без приведения типов, как есть.

Комментарии
0/3000
4

Что такое ссылка в PHP?

Ссылки в PHP - это средство доступа к содержимому одной переменной под разными именами. Они не похожи на указатели в C - например, вы не можете выполнять над ними адресную арифметику, они не являются реальными адресами в памяти и т.д. Вместо этого указатели в PHP - это псевдонимы в таблице имён переменных.

Комментарии
0/3000
5

Как передать переменную по ссылке?

<?php function foo(&$var) { $var++; } $a = 5; foo($a); // $a здесь равно 6 ?> Вы можете передать переменную по ссылке в качестве аргумента в функцию, чтобы эта функция могла изменять значение переменной. Замечание: В вызове функции отсутствует знак ссылки - он есть только в определении функции. Этого достаточно для корректной передачи аргументов по ссылке. По ссылке можно передавать: - Переменные, например foo($a) - Ссылки, возвращаемые функцией, например: <?php function foo(&$var) { $var++; } function &bar() { $a = 5; return $a; } foo(bar()); ?>

Комментарии
0/3000
6

Для чего нужен ini__set()?

PHP позволяет изменять некоторые из настроек, приведенных в php.ini, с помощью ini_set(). ini__set() принимает два аргумента: первый — это имя параметра, который нужно изменить, а второй — его новое значение. Данный код активирует настройку display_error: ini_set('display_errors', '1'); Нужно поместить приведенный выше код в начало скрипта, чтобы параметр оставался включенным до конца. Кроме того, значения, установленные через ini_set(), применимы только к текущему скрипту.

Комментарии
0/3000
7

Что такое интерфейс в PHP?

Интерфейс в PHP — это конструкция языка, описывающая абстрактный тип данных (АТД). АТД определяет набор операций (функций), независимых от конкретной реализации типа для манипулирования его значениями. На практике интерфейсы содержат определения функций (то есть описание их сигнатур) без их реализации.

Комментарии
0/3000
8

Что такое абстрактный класс?

Абстрактный класс - это так называемый базовый класс, не предназначенный для создания его экземпляров (объектов). Основной смысл и назначение абстрактных классов заключается в расширении возможностей его дочерних классов.

Комментарии
0/3000
9

Поддерживает ли PHP множественное наследование?

Нет, PHP не поддерживает множественное наследование. То есть у производного класса может быть только один родительский. Но с помощью “магической” функции __call() его можно эмулировать.

Комментарии
0/3000
10

Какие есть модификаторы доступа в PHP?

С помощью специальных модификаторов можно задать область видимости для свойств и методов класса. В PHP есть три таких модификатора: public: свойство, метод или конструктор будут доступны для всех классов, которые их используют. protected: может быть использован только в самом классе, а также в его дочерних. private: может быть использован только в самом классе и нигде больше.

Комментарии
0/3000
11

Зачем нужен «static» в PHP?

1. Для объявления статической локальной переменной. 2. Для объявления статического свойства или метода класса. 3. Для реализации позднего статического связывания.

Комментарии
0/3000
12

Что такое позднее статическое связывание?

PHP реализует функцию, называемую позднее статическое связывание, которая может быть использована для того, чтобы получить ссылку на де-факто вызываемый класс в контексте статического наследования.

Комментарии
0/3000
13

Что такое PDO?

PDO (PHP Data Objects) — расширение PHP, которое реализует взаимодействие с базами данных при помощи объектов. Профит в том, что отсутствует привязка к конкретной системе управления базами данных. Предоставляемый интерфейс поддерживает, среди прочих, такие популярные СУБД: - MySQL; - SQLite; - PostgreSQL; - Microsoft SQL Server.

Комментарии
0/3000
14

Разница между isset() и empty()?

isset() — проверяет переменную на существование, а также, что её значение не null. Если переменная существует и её значение не null, то функция вернёт true, все остальные случаи — это false. empty() — проверяет переменную на существование и на пустоту. Если в переменной есть какое-то не пустое значение (в том числе null) или true, то функция вернёт false, все остальные случаи — это true.

Комментарии
0/3000
15

Разница между require и include?

Языковая конструкция include включает и выполняет указанный файл. Если подключаемый файл не найден, то мы увидим ошибку уровня Warning(предупреждение) и скрипт спокойно продолжит своё выполнение. Конструкция require похожа на include - она включает и выполняет указанный файл, за исключением того, что при отсутствии файла произойдёт фатальная ошибка уровня E_COMPILE_ERROR и работа скрипта остановится.

Комментарии
0/3000
16

Зачем require и include приставка _once?

include_once "test.php"; require_once "test.php"; У вышеуказанных языковых конструкций есть так называемые близнецы: include_once и require_once. При использовании именно этих конструкций PHP будет подключать файл только один раз. Если в подключаемом файле находятся декларации функций и/или классов, то имеет смысл подключать такой файл с помощью _once, потому как попытка переопределения любой существующей функции приведёт к Fatal Error.

Комментарии
0/3000
17

Разница между одинарными и двойными кавычками?

<?php $beer = ‘Chimay’; echo$beer”; ?> В двойных кавычках данные “парсятся”, а в одинарных – нет. Двойные кавычки в данном случае приведут к результату Chimay, а одинарные к $beer.

Комментарии
0/3000
18

Разница между self и $this?

self используется для статических функций и членов класса, а $this наоборот для нестатических. $this - это ссылка на текущий объект и она нужна, чтобы обратиться к переменной в контексте класса. self используется в том же ключе, но уже для статических свойств.

Комментарии
0/3000
19

Что работает быстрее: преинкремент или постинкремент?

Преинкремент работает быстрее, изменяя содержимое самой переменной, в то время как постинкремент создает временную переменную.

Комментарии
0/3000
20

Какой алгоритм сортировки используется в PHP для таких функций, как sort и т. д.?

Используется introsort. В документации есть упоминание об использовании quicksort, но тут нет противоречия, ведь introsort — гибридный алгоритм сортировки, где при малом количестве элементов используется сортировка вставкой, а позже используется более быстрый алгоритм: quicksort или heapsort.

Комментарии
0/3000
21

Какой алгоритм используется в PHP для сборки мусора?

Reference counting, tri-color marking

Комментарии
0/3000
22

Что такое PSR?

PSR расшифровывается как PHP Standards Recommendations, что переводится как «Рекомендованные стандарты PHP». Эти стандарты создаются и поддерживаются сообществом опытных PHP-программистов со следующей целью: нужно писать код на языке PHP в одном стиле так, чтобы его без проблем могли читать другие программисты. Иными словами, это такой набор правил, следуя которым, код становится более понятным и единообразным, когда над ним работают несколько людей.

Комментарии
0/3000
23

Какая разница между echo и print?

Во-первых, echo может принимать и выводить любое количество аргументов, а print - только один. Во-вторых, print всегда возвращает 1, поэтому может быть использован в контексте выражения.

Комментарии
0/3000
24

Что такое магические методы?

Магические методы - это специальные методы, которые переопределяют действие PHP по умолчанию, когда над объектом выполняются определённые действия. Следующие методы считаются магическими: __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __serialize(), __unserialize(), __toString(), __invoke(), __set_state(), __clone() и __debugInfo(). Например, метод __toString() позволяет классу решать, как он должен реагировать при преобразовании в строку. Конкретный случай: что вывести при выполнении echo $obj.

Комментарии
0/3000
25

Что такое генераторы?

Генератор позволяет писать код, использующий foreach для итерирования набора данных, без необходимости создания массива в памяти, что может привести к превышению лимита памяти, либо потребует довольно много времени для его создания. Вместо этого, можно написать функцию-генератор, которая, по сути, является обычной функцией, за исключением того, что вместо возврата единственного значения, генератор может выполнять возврат (yield) столько раз, сколько необходимо для генерации значений, позволяющих перебрать исходный набор данных.

Комментарии
0/3000
26

Что такое трейты?

<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } ?> Трейт - это механизм обеспечения повторного использования кода в языках с поддержкой только одиночного наследования, таких как PHP. Трейт предназначен для уменьшения некоторых ограничений одиночного наследования, позволяя разработчику повторно использовать наборы методов свободно, в нескольких независимых классах и реализованных с использованием разных архитектур построения классов.

Комментарии
0/3000
27

Что такое пространства имён?

<?php namespace MyProject { function run() { echo 'Running from a namespace!'; } } В широком смысле - это один из способов инкапсуляции элементов. Такое абстрактное понятие можно увидеть во многих местах. Например, в любой операционной системе директории служат для группировки связанных файлов и выступают в качестве пространства имён для находящихся в них файлов. Замечание: Имена пространств имён регистронезависимы.

Комментарии
0/3000
28

Что такое сессии?

Поддержка сессий в PHP заключается в способе сохранения некоторых данных между несколькими последовательными доступами. Каждому посетителю сайта присваивается уникальный идентификатор, называемый идентификатором сессии (session id). Он хранится либо в cookie на стороне пользователя, либо передаётся через URL. Поддержка сессий позволяет сохранять данные между запросами в суперглобальном массиве $_SESSION. В тот момент, когда посетитель получает доступ к сайту, PHP проверяет автоматически (если session.auto_start установлено в 1) или по запросу (явным образом через вызов session_start()), был ли определённый идентификатор сессии послан вместе с запросом. Если это так, восстанавливается сохранённое ранее окружение.

Комментарии
0/3000
29

Что такое суперглобальные переменные?

Суперглобальные переменные — встроенные переменные, которые всегда доступны во всех областях Некоторые предопределённые переменные в PHP являются "суперглобальными", что означает, что они доступны в любом месте скрипта. Нет необходимости использовать синтаксис global $variable; для доступа к ним в функциях и методах. Суперглобальными переменными являются: - $GLOBALS - $_SERVER - $_GET - $_POST - $_FILES - $_COOKIE - $_SESSION - $_REQUEST - $_ENV

Комментарии
0/3000
30

Что такое $GLOBALS?

Ассоциативный массив (array), содержащий ссылки на все переменные, определённые в данный момент в глобальной области видимости скрипта. Имена переменных являются ключами массива.

Комментарии
0/3000
31

Что такое замыкания?

<?php $greet = function($name) { printf("Привет, %s\r\n", $name); }; $greet('Мир'); $greet('PHP'); ?> Анонимные функции, также известные как замыкания (closures), позволяют создавать функции, не имеющие определённых имён. Замыкания могут быть использованы в качестве значений переменных; PHP автоматически преобразует такие выражения в экземпляры внутреннего класса Closure. Замыкания могут наследовать переменные из родительской области видимости. Любая подобная переменная должна быть объявлена в конструкции use. Начиная с PHP 7.1, эти переменные не должны включать superglobals, $this и переменные с теми же именами, что и параметры функции. Объявление типа возвращаемого значения функции должно быть помещено после конструкции use.

Комментарии
0/3000
Смежные категории
Computer Science
12 вопросов
Вопросы с собеседований про операционные системы
1062 просмотра
Базы данных
10 вопросов
Вопросы с собеседований о репликации баз данных
1458 просмотров
Docker
7 вопросов
Коллекция полезных команд для Docker
1322 просмотра
Go
54 вопроса
Вопросы и ответы с собеседований по Go
4296 просмотров
Computer Science
11 вопросов
Вопросы и ответы про интернет-протоколы
1466 просмотров
Базы данных
60 вопросов
Вопросы и ответы с собеседований по SQL
2378 просмотров
Рекомендуем
Computer Science
15 вопросов
Вопросы и ответы с собеседований по DDD
1527 просмотров
Computer Science
28 вопросов
Объяснение паттернов проектирования с примерами
1424 просмотра
Computer Science
11 вопросов
Вопросы и ответы про интернет-протоколы
1466 просмотров
Computer Science
12 вопросов
Вопросы с собеседований про операционные системы
1062 просмотра
Базы данных
60 вопросов
Вопросы и ответы с собеседований по SQL
2378 просмотров
Git
20 вопросов
Вопросы и ответы с собеседований по Git
1784 просмотра
Другие разделы

Лента

Активность пользователей Девстанции

Перейти к ленте

Лидеры

Рейтинг самых результативных пользователей сообщества

Перейти к лидерам

Треды

Общение по интересам и связь с разработчиками

Перейти к тредам

Задачи

Решение алгоритмических задач с собеседований

Перейти к задачам

Вопросы

Ответы на вопросы с технических собеседований

Вы находитесь здесь

Викторины

Интерактивные викторины по вопросам с собеседований

Перейти к викторинам
Мы в Telegram
Новости проекта, общение с разработчиками, общение по интересам - присоединяйтесь!