Готовясь к прохождению собеседования, PHP программисты часто задаются вопросами: что меня будут спрашивать, какие вопросы и задания могут быть? Вопросы и задачи могут быть абсолютно разными. Здесь нельзя предугадать, что конкретно у вас будут спрашивать, и какое тестовое задание попросят пройти.

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

Основное

Что такое PHP?

PHP - это скриптовый язык программирования для создания сайтов и веб-приложений. PHP унаследовал синтаксис языков программирования C, Perl, Java.

Какие знаешь версии PHP?

Есть следующие версии PHP:

  • PHP 2, PHP 3, PHP 4 старые и не поддерживаемые версии
  • PHP 5 >= используется в большинстве проектов, преимущественно обладает версия 5.6
  • PHP 7 актуальная версия с новыми возможностями и улучшениями

 

Синтаксис PHP

Что такое short tags и как его использовать в PHP?

Для обработки скрипта все содержимое кода необходимо заключать в открывающие и закрывающие теги <?php и ?>, которые определяют начало и конец обработки. short tags - это короткий синтаксис позволяющий использовать <? и тем самым сократить запись, отбросив слово php и для вывода содержимого текст или переменной вместо echo использовать = (ровно) Например:

Стандартный синтаксис:

<?php
echo 'Выполнить документ';
?>

Короткий синтаксис:

<?= 'Выполнить документ' ?>

 

Как изолировать PHP код от HTML? Для чего это нужно?

Изолирование кода необходимо для использования смешанного содержимого скрипта: php, javascript, css и т.п. Изолирование обеспечивает удобство и простоту понимания содержимого скрипта.

Например:

<?php if ($view == true): ?>

 <p>Отображаем содержимое HTML №1</p>

<?php else: ?>

 <p>Отображаем содержимое HTML №2</p>

<?php endif; ?>

 

Как использовать комментарии в коде PHP?

Комментарии позволяют документировать участки кода в PHP скрипте. Содержимое комментариев не отображается при выполнении скрипта. PHP поддерживает комментарии в следующих стилях:

  • C (Си)
  • C++
  • Оболочки Unix (стиль Perl).

Однострочные комментарии записываются до конца строки или текущего блока PHP-кода после символов // или Многострочные комментарии запитываются внутри символов /* и */ Например:

Однострочный комментарий:

<?php
echo 'Этот текст будет выведен';

//echo 'Этот текст не будет выведен';
?>

Многострочный комментарий:

<?php
echo 'Это текст';

/* А это многострочный комментарий

      и еще одна строка комментария

а потом еще строка

и еще...

*/
?>


Что такое $this и self в PHP?

$this - является ссылкой на текущий объект. self - является ссылкой на текущий класс.

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

В отличии от одинарных, данные в двойных кавычках парсятся.Например, при использовании двойных кавычек результат выведет Hello, а одинарные кавычки выведут переменную как текст, а не ее значение:

<?php
$data = 'Hello';
echo "$data";
?>

 

Типы данных PHP

Сколько в PHP типов данных? Какие это типы данных?

В PHP есть 8 базовых типов данных

4 скалярных типа:

  • boolean - логический тип true/false
  • integer - целочисленный тип
  • float - числовой тип с плавающей точкой, содержащий целые и дробные числа
  • string - строковый тип

2 составных типа:

  • array - массив с упорядоченным списком элементов
  • object - объект

2 специальных типа:

  • resource - ссылка на внешний (абстрактный) ресурс.
  • NULL - пустой тип, без значения

 

Какой тип типизации данных в PHP?

В PHP используется динамическая типизация, не требующая объявления переменной и указания ее типа при объявлении.

 

Что такое переменная и как ее использовать?

Переменная это именованная область в памяти для хранения данных. Имя переменной должно начинаться с буквы или символа подчеркивания, состоять из букв, цифр и символов подчеркивания. Перед именем переменной необходимо использовать символ $.

Например:

<?php
$param = 'Данные в переменной';

echo $param; // выводим текст из переменной

?>


Что такое область видимости переменной?

Область видимости переменной, это место в котором переменная определена. Например, внутри функции или за ее пределом.

 

Что такое переменные извне?

Переменные извне - это данные полученные из формы с помощью GET и POST, данные полученные из COOKIE. 

 

В чем разница между GET и POST?

GET передает данных из адресной строки в виде строки с параметрами. POST передает данные используя HTTP  тело запроса (например, обычно через html форму). GET может передавать только данные объемом 1024 символов. POST может отправлять данные большого размера, который обычно установлен в настройках сервера.


 

Константы

Что такое константы? Как их использовать?

Константы - это уникальное имя, которое содержит какие-то данные. Константы можно использовать двумя способами:

Способ 1:

define('BLOCK', 'значение константы'); // установка константы

echo BLOCK; // вывод значения константы

Способ 2:

const BLOCK = 'значение константы';

echo BLOCK; // вывод значения константы

 

Что такое волшебные константы?

Волшебные константы - это список предопределенных в PHP констант. Существуют следующие волшебные константы

Имя

Описание

__LINE__

Текущий номер строки в файле.

__FILE__

Полный путь и имя текущего файла с развернутыми симлинками. Внутри подключаемого файла возвращается имя данного файла.

__DIR__

Директория файла. Внутри подключаемого файла возвращается директория этого файла.

__FUNCTION__

Имя функции или {closure} в случае анонимной функции.

__CLASS__

Имя класса, содержит название пространства имен, в котором класс был объявлен (например, Block\Aside).

__TRAIT__

Имя трейта, содержит название пространства имен, в котором трейт был объявлен (например, Block\Aside).

__METHOD__

Имя метода класса.

__NAMESPACE__

Имя текущего пространства имен.

ClassName::class

Полное имя класса (с указанием пространства имен).


 

Операторы PHP

Что такое оператор?

Оператор  - это одно или несколько выражений, используемых для выполнения определенных действий.

Какие существуют операторы?

В PHP есть следующие виды операторов:

  • оператор присваивания
  • арифметические операторы
  • логические операторы
  • побитовые операторы
  • операторы сравнения
  • оператор управления ошибками
  • операторы инкремента и декремента
  • строковые операторы
  • операторы массивов
  • оператор проверки типа


Что такое арифметические операторы?

Арифметические операторы это простейшие математические операции: идентичность, отрицание, сложение, вычитание, умножение, деление, деление по модулю, возведение в степень.

 

Что такое логические операторы?

Логические операторы используются для проверки истинности или ложности каких-либо действий или условий. Есть следующие логические операторы:

Пример

Название

$a and $b

И

$a or $b

Или

$a xor $b

Исключающее или

! $a

Отрицание

$a && $b

И

$a || $b

Или

 

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

Оператор присваивания обозначается знаком = и позволяет указать для переменной новое значение.

Например:

<?php
$a = 5;

$a = 3;

echo $a; //выведет не 5, а 3, которое было присвоено переменной.
?>

Что такое побитовые операторы?

Побитовые операторы это операции производимые над цепочкой битов.

Что такое операторы сравнения?

Операторы сравнения используются для сравнения значений переменных между собой.Существуют следующие операторы сравнения:

Пример

Название

$a == $b

Равно

$a === $b

Тождественно равно

$a != $b

Не равно

$a <> $b

Не равно

$a !== $b

Тождественно не равно

$a < $b

Меньше

$a > $b

Больше

$a <= $b

Меньше или равно

$a >= $b

Больше или равно

$a <=> $b

Космический корабль (spaceship)

 

Что такое оператор управления ошибками?

Оператор управления ошибками обозначается знаком @ и позволяет игнорировать вывод ошибок для используемых функций.

Например:

<?php
if (@copy('/uploads/images/bg.png’)) {

// файл скопирован

}else {

// файл не скопирован

}
?>

Что такое операторы исполнения?

Оператор исполнения позволяет выполнить строку, заключенную в кавычки `` и возвращает полученный вывод. Например:

<?php

$output = `ls -al`;

echo "<pre>$output</pre>";

?>

 

Что такое операторы инкремента и декремента?

Операторы инкремента и декремента позволяют увеличить и уменьшить значение переменной на 1 (единицу). PHP поддерживает префиксные и постфиксные операторы инкремента и декремента в стиле C.Например:

<?php

$i = 1;

$i++; //увеличит значение на 1

?>

 

<?php

$i = 2;

$i--; //уменьшит значение на 1

?>

 

Пример

Название

Действие

++$a

Префиксный инкремент

Увеличивает $a на единицу, затем возвращает значение $a.

$a++

Постфиксный инкремент

Возвращает значение $a, затем увеличивает $a на единицу.

--$a

Префиксный декремент

Уменьшает $a на единицу, затем возвращает значение $a.

$a--

Постфиксный декремент

Возвращает значение $a, затем уменьшает $a на единицу.

 

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

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

 

Что такое строковые операторы?

Строковые операторы позволяют работать с текстом. Оператор конкатенации ('.') соединяет в строку левый и правый аргументы. Оператор присваивания с конкатенацией ('.='), соединяет в строку правый аргумент к левому.

 

Что делает оператор проверки типа?

Оператор проверки типа instanceof используется чтобы определить, является ли текущий объект экземпляром указанного класса.

<?php

class MyClass

{

}


class NotMyClass

{

}

$a = new MyClass;


var_dump($a instanceof MyClass);

var_dump($a instanceof NotMyClass);

?>

 

Управляющие конструкции

Обязательно ли использовать закрывающий тег ?> в конце файла?

Нет, не обязательно. В файлах, где только PHP код, его лучше не использовать, чтобы предотвратить случайное попадание конечного пробела в вывод.

В чем разница между require(), require_once(), include(), include_once()?

  • require() просто подключает в текущий файл указанный
  • require_once() подлключает указанный файл в текущий только в том случает, если он не был ранее подключен
  • include() работает также как и require(), подключает файл и в случае ошибки возвращает WARNING, в то время как require() возвращает FATAL ERROR
  • include_once() работает также как и require_once(), подключает файл если он не был ранее подключен и возвращает WARNING, в то время как require_once() возвращает FATAL ERROR.

В чем отличие цикла while от do while?

Тело цикла do-while выполнится хотя бы один раз, так как условие проверяется в конце цикла, в то время как в цикле while условие проходит проверку вначале.

 

Что такое goto и как он работает?

Оператор goto обеспечивает переход из одной части программы в другую. Место в которое производится переход указывается с помощью специальной метки с двоеточием. Для перехода к этому месту используют оператор goto и название метки.

Например:

<?php
goto a;
echo 'Первый вывод';
 
a:
echo 'Место куда делается переход';
?>

В чем различия между операторами break и continue?

Оператор break прерывает выполнение инструкций for, foreach, while, do-while или switch, а опратор continue пропускает часть итерации внутри цикла.

 

Как прервать выполнение for, foreach, while, do-while или switch?

Прервать выполнение инструкций for, foreach, while, do-while или switch возможно с помощью оператора break.

 

Как пропустить часть интерации цикла внутри for, foreach, while, do-while или switch?

Пропустить часть интерации цикла внутри for, foreach, while, do-while или switch возможно с помощью оператора continue.

 

Что такое declare?

Оператор declare производит установку директив исполнения для блока кода.

Например:

<?php
declare(strict_types=1);
?>

 

Почему в declare нельзя использовать переменные и константы?

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

 

Что такое альтернативный синтаксис?

Альтернативный синтаксис используется для операторов if, while, for, foreach и switch и позволяет изменить запись выражения, использовав вместо открывающей фигурной скобки двоеточие (:), а вместо закрывающей скобки endif;, endwhile;, endfor;, endforeach; или endswitch;

 

Строки

Есть ли разница между одинарными и двойными кавычками?

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

Например:

$example = 'Unetway';
echo "$example"; // выведет Unetway


$example = 'Unetway';
echo '$example'; // выведет $example

 

В чем различия между echo и print?

Оба оператора используются для вывода текста. echo() является конструкцией, которая может принимать несколько аргументов и выводить их на экран. print() не совсем функция и может принимать только 1 аргумент, а также писаться без скобок.

Например:

echo $param;

echo 'строка';

echo ('строка 1', 'строка 2', 'строка N');

print('строка');

print 'строка'; 


Дана строка "Hello world!". Как перевернуть строку?

Чтобы перевернуть строку, можно использовать функцию strrev()

 

Массивы

Как удалить переменную или элемент из массива?

Для удаления переменной или элемента из массива надо использовать функцию unset(). Например:

// удаляем одну переменную
unset($block);

// удаляем один элемент массива
unset($block['keks']);

// удаляем несколько переменных
unset($block1, $block2, $block);

 

Дан массив [1,2,3,4,5,6,7]. Как перевернуть его и получить [7,6,5,4,3,2,1]?

Чтобы перевернуть массив, можно использовать функцию array_reverse()

 

Как получить максимальное значение элемента массива [1,2,3,4,5,10,20,30,40,50,70,100, 10, 30, 50]?

Для получения максимального значения массива можно использовать функцию max().

$arr = [1,2,3,4,5,10,20,30,40,50,70,100, 10, 30, 50];
echo max($arr);

Либо сделать это через цикл:

$arr = [1,2,3,4,5,10,20,30,40,50,70,100, 10, 30, 50];
$max = $arr[0];
foreach ($arr as $row) {
if ($max < $row) {
$max = $row;
}
echo $max;
}

 

Функции

Что такое функция?

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

 

Что такое аргументы функции?

Аргументы функции это данные, передаваемые внутрь функции в виде списка параметров. Аргументы разделяются запятыми и вычисляются слева на право.

 

Какие существуют способы передачи аргументов в функцию?

Передача аргументов в функцию осуществляется: по значению (часто используемый), по ссылке, значения по умолчанию.

 

Как просиходит передача аргументов в функцию по значению?

Передача аргументов в функцию по ссылке происходит с помощью указания новых аргументов внутри вызываемой функции.

Например:

<?php
function my_block($text1, $text2, $text3)
{
    return $text1 . $text2 . $text3;
}

// выведет 'Съешь этих мягких,французских булок.'
echo my_block('Съешь этих мягких', 'французских',  'булок');

?>

 

Как происходит передача аргументов в функцию по ссылке?

Передача аргументов в функцию по ссылке происходит с помощью указания амперсанда (&) перед именем аргумента в описании функции.

Например:

<?php
function my_block(&$text)
{
    $text .= 'французских булок.';
}
$text = 'Съешь этих мягких, ';
my_block($text);
echo $text;    // выведет 'Съешь этих мягких,французских булок.'

?>

 

Как для функции просиходит установка значений по умолчанию?

Установка значений по умолчанию для функции просиходит с помощью указания значений для аргументов функции.

Например:

<?php
function my_block($text = 'Съешь этих мягких,французских булок.')
{
    return $text;
}

echo my_block(); // выведет 'Съешь этих мягких,французских булок.'
echo my_block('Французские булки'); // выведет 'Французские булки.'  

?>

 

Какой оператор производит возврат результата функции?

Возрат результата функции производится с помощью оператора return.

 

Как происходит обращение к функциям через переменные?

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

 

Что такое ананимные функции?

Анонимная функция, или по другому, замыкания (closures), представляет собой функцию не имеющую имени и используемую для значений callback-параметров.

Например:

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'cookie-down');
// выведет cookiedown
?>

 

Что такое static функция?

Static функция вызывается напрямую у класса и позволяет обращаться к свойствам и методам класса без создания экземпляра класса. При этом указатель $this не доступен внутри метода объявленного статическим.

 

Что такое рекурсия?

Рекурсия - это вызов функции из самой себя.

 

Классы и объекты

Что такое объектно-ориентированное программирование?

Объектно-ориентированное программирование - это парадигма программирования с использованием объектов и классов.

 

Что такое MVC?

MVC (Model-View-Controller) схема шаблона проектирования, разделенный на три компонента для работы с базой данных, интерфейсом отображения данных, взаимосвязью приложения с пользователем. Модель отвечает за работу с информацией из базы данных. Представление отвечает за отображение полученной информации на экран. Контроллер отвечает за взаимодействие между данными и отображением.

 

Что такое конструктор?

Конструктор это метод _constructor(), который вызывается при создании экземпляра класса с помощью ключевого слова new.

 

Как в PHP сделать множественное наследование?

В PHP нельзя сделать множественное наследование. У класса может быть только один родитель. Для эмуляции множественного наследования можно использовать функцию _call() или трейты (traits). Трейт позволяет группировать и повторно использовать наборы методов в нескольких классах.

 

 Назовите основные концепции объектно-ориентированного программирования

Основными концепциями объектно-ориентированного программирования являются: инкапсуляция, наследование, полиморфизм. Инкапсуляция объединяет методы и данные и защищает от внешнего вмешательства или неправильного использования. Наследование позволяет одному объекту наследовать методы и свойства другого объекта. Полиморфизм создает общий интерфейс для схожих по смыслу действий, чтобы решать множество разных задач.

 

Что такое виртуальный метод?

Виртуальный метод является переопределенным методом класса в классах-наследниках для вызова во время исполнения.

 

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

Класс это модель еще не существующего объекта, описывающая устройство бъекта - его методы и свойства.

 

Что такое объект?

Объект это данные и методы для их обработки.

 

Что такое члены класса?

Членами класса называют данные и методы объекта.

 

В чем отличие класса от объекта?

Объект является экземпляром типа класса. Класс является типом данных.

 

Что такое область видимости переменной?

Область видимости переменной - это область, в пределах которой метод или переменная продолжает работать и возвращать значение.

Есть несколько типов определяемых область видимости методов и переменных:

  • public - переменная доступна из любого места
  • protected - защищенная переменная доступна только внутри класса, в котором была объявлена и из производных классов
  • private - закрытые методы и переменные доступны только внутри класса

 

В чем отличие локальной переменной от глобальной переменной?

Локальные переменные доступны только в конкретном методе, а глобальные во всей программе.

 

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

Абстрактный класс в объектно-ориентированном программировании - это базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм. Абстрактный класс может содержать (и не содержать) абстрактные методы и свойства.

 

В чем разница между абстрактным классом и интерфейсом?

Абстрактный класс - имеет хотя бы один метод и обозначается как abstract. Интерфейс - это тоже абстрактный класс, но он не может иметь свойств, и не определено содержимое методов.

 

Зачем интерфейс, когда есть абстрактный класс?

Произвести наследование можно только от одного абстрактного класса, но реализовать множество интерфейсов. Абстрактный класс наследуется, а интерфейс реализуется.

 

Пространства имен

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

Пространства имен - это объединение элементов (классов) с уникальными названиями в одну группу и их защита от внешнего вмешательства (инкапсулирование) внутри единого пространства с указанным именем.

 

Какие проблемы решает пространство имен?

Пространство имен решает проблемы конфликта имен классов, функций, констант и длинных имен различных библиотеки и модулей.

 

Как объявляются пространства имен?

Пространства имен объявляются с помощью ключевого слова namespace.

 

Как получить название пространства имен?

Получить название пространства имен можно с помощью магической константы __NAMESPACE__.

 

Что такое use?

Ключевое слово use позволяет импортировать файл или каталог.

 

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

Псевдоним имени - это указание короткого имени для импортируемого пути к файлу или каталогу. 

 

Исключения

Что такое исключения?

Исключения позволяют сделать обработку ошибок в PHP: сгенерировать или поймать.

 

Генераторы

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

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

 

Что такое yield?

Ключевое слово yield используется при создании генератора для перебора значений и вместо возращения значения, как это делает return, перебирает все значения.

 

Ссылки

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

Ссылка - это доступ к переменной под разными именами.

 

Что делают ссылки?

Ссылки обеспечивают выполнение следующих операций: присвоение по ссылке, передачу по ссылке и возврат по ссылке.

 

Что не делают ссылки?

Ссылки не являются указателями на данные. 

 

Cookie

Что такое Cookie и зачем они используются?

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

 

Что нельзя хранить в Cookie и почему?

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

 

Какие есть типы cookie?

Есть следующие типы cookie: сессионные, постоянные, защищенные, HTTP-only. Сессионные (временные) - существуют только когда пользователь зашел на сайт, а при закрытии браузера уничтожаются.  Постоянные - существуют все время и удаляются только в установленную дату или промежуток времени. Защищенные - куки могут быть переданы только через шифрованное HTTPS соединение.  HTTP-only  -  к кукам нельзя обращаться из браузера через JavaScript, что устраняет их кражу через кросс-сайтового скриптинга (XSS).

 

Сессии

Что такое сессии и зачем они используются?

Сессии - это специальные файлы на сервере для хранения и доступа различных данных. Сессии позволяют хранить данные, к которым через браузер пользователь не может получить доступ, например, как в cookie. Посетителю сайта присваивается уникальный id (идентификатор сессии), который хранится в cookie на стороне пользователя или передается через адресную строку. 

 

 

Вопросы MySQL

Где и как нужно хранить пароли пользователей сайта?

Пароли пользователей сайта необходимо хранить в базе данных в защищенном виде хэшировав их с помощью: sha1(), crypt(), password_hash().

 

Как получить одинаковые значения в поле MySQL?

Есть таблица product. Необходимо получить все одинаковые значения из поля vendor.

Решение:

SELECT `vendor` FROM `product` WHERE `vendor` IN
(SELECT `vendor` FROM `product` GROUP BY `vendor` HAVING COUNT(1) > 1)
ORDER BY `vendor` ASC