- Что такое ссылки?
Ссылки в PHP — это средство доступа к содержимому одной переменной под разными именами
- Какие основные операции с использованием ссылок?
-
Назовите простые типы данных, поддерживаемые в РНР?
-
4 скалярных типа:
- bool (логический тип)
- int (целые числа)
- float (дробные числа)
- string (строки)
-
2 комплексных (составных) типа:
- array (массивы)
- object (объекты)
-
2 специальных типа:
- resource (ресурсы)
- null (отсутствие значения)
-
3 "псевдотипа"
- callable (функции)
- mixed (любой тип)
- number
-
-
Что такое инкремент и декремент, в чем разница между префиксным и постфиксная инкрементом и декрементом?
Инкремент – это операция в языках программирования, которая увеличивает переменную на единицу.
Существуют два вида инкрементов: преинкремент (или префиксный инкремент) и постинкремент (или постфиксный инкремент). В синтаксисе префиксный инкремент ставится перед необходимой переменной, а постфиксный, соответственно, после.
Главное различие между ними, что при использовании операции преинкремента значение переменной сначала увеличивается на 1, а затем используется в выражении, к которому относится данная переменная. А при использовании операции постинкремента значение переменной сначала используется в выражении, а потом увеличивается на 1.
x++; // Постинкремент
++x; // Преинкремент
Декремент – это подобная инкременту операция, с той лишь разницей, что она уменьшает числовую переменную на единицу, также имеет два вида: предекремент (префиксный декремент) и постдекремент (постфиксный декремент).
Эти виды декрементов работают абсолютно так же, как и инкременты с той лишь разницей что происходит уменьшение значения на единицу.
x--; //Постдекремент
--x; //Предекремент
- Что такое рекурсия?
Рекурсия — это функция, которая вызывает саму себя.
-
В чем разница между =, == и ===?
- = - присваивание
- == - сравнение с авто-приведением типов (таблицы)
- === - эквивалентное сравнение (типы переменных и их значения должны строго совпадать)
-
Какие знаете принципы ООП?
Объектно ориентированное программирование базируется на принципах:
- инкапсуляция
- наследование
- абстракция
- полиморфизм
Инкапсуляция (encapsulation) - это механизм, который объединяет данные(приват. свойства) и код(сеттеры, геттеры), данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый "чёрный ящик".
Чёрный ящик», рассматривается как имеющая некий «вход» для ввода информации и «выход» для отображения результатов работы, при этом происходящие в ходе работы системы процессы наблюдателю неизвестны.
Наследование позволяет наследовать свойства и методы других классов, класс который наследуется, называется родительским классом, а класс, который наследует другой класс, называется дочерним классом. Дочерний класс при создании получает все свойства и методы родителя.
Aбстракция это когда мы сосредотачиваемся только на существенных для задачи деталях и игнорируем всё остальное. В ООП абстракция означает, что для каждого объекта мы задаём минимальное количество методов, полей и описаний, которые позволят нам решить задачу. Чем меньше характеристик, тем лучше абстракция, но ключевые характеристики убирать нельзя. Чтобы работать с абстракциями, используют интерфейсы.
Интерфейсы — это набор методов класса, доступных для использования другими классами, интерфейсом класса будет являться набор всех его публичных методов в совокупности с набором публичных атрибутов.
Можно заметить, что абстрактные классы похожи на интерфейсы - и те, и другие могут определять методы без реализации, которые реализуются в других классах. Однако, абстрактные классы, как и обычные классы, могут иметь переменные, неабстрактные методы, конструкторы с реализацией, а интерфейсы нет. Кроме того, в PHP один класс может наследоваться только от одного класса, тогда как один класс может применять сразу несколько интерфейсов.
Полиморфизм способность по-разному обрабатывать объекты в зависимости от их типов данных, когда мы можем вызывать одни и те же методы у разных классов. классический пример функция len () в Python, которая возвращает длину указанного в ней объекта:
print(len('Abc'))
выведет 3
print(len([1,2,3,4]))
выведет 4
- Какая система типов используется в PHP? Опишите плюсы и минусы.
PHP – это язык со слабой динамической типизацией.
Статическая / динамическая типизация. Статическая определяется тем, что конечные типы переменных и функций устанавливаются на этапе компиляции. Т.е. уже компилятор на 100% уверен, какой тип где находится. В динамической типизации все типы выясняются уже во время выполнения программы
Сильная / слабая типизация (также иногда говорят строгая / нестрогая). Сильная типизация выделяется тем, что язык не позволяет смешивать в выражениях различные типы и не выполняет автоматические неявные преобразования, например нельзя вычесть из строки множество. Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно.
Преимущества динамических типов::
В отличие от статической типизации, программирование полностью сфокусировано на сути дизайна программы, краткость кода также будет улучшена, а эффективность разработки может быть улучшена в несколько раз.
Поскольку масштаб программы уменьшен, понятность программы также улучшена.
Недостатки динамических типов:
- Скорость выполнения программы низкая из-за динамического языка типов, проверка типов выполняется во время выполнения.
- Никакие ошибки не могут быть обнаружены без исполнения.
- Чем отличаются ключевые слова: include и require, mysql_connect и mysql_pconnect?
Include() используется для помещения данных одного файла PHP в другой. Если возникают ошибки, то функция include() выдает предупреждение, но не останавливает выполнение скрипта, т.е. скрипт продолжает выполняться.
Require() также используется для помещения данных одного файла PHP в другой файл. Если есть какие-либо ошибки, то функция require() выдает предупреждение и фатальную ошибку и останавливает выполнение скрипта, т.е. скрипт не продолжает выполняться.
require_once можно быть уверенным, что один файл не будет включен дважды. Работает конструкция однократного включения require_once так же, как и require. Разница в ее работе лишь в том, что перед включением файла интерпретатор проверяет, включен ли указанный файл ранее или нет. Если да, то файл не будет включен вновь.
mysql_pconnect - Устанавливает постоянное соединение с сервером MySQL
mysql_pconnect() работает аналогично mysql_connect() с двумя важными отличиями.
Во-первых, при соединении функция пытается найти уже открытый (постоянный) указатель на тот же сервер с тем же пользователем и паролем. Если он найден, возвращён функцией будет именно он, вместо открытия нового соединения.
Во-вторых, соединение с SQL-сервером не будет закрыто, когда работа скрипта закончится. Вместо этого, оно останется рабочим для будущего использования (mysql_close() также не закрывает постоянные соединения, открытые mysql_pconnect()).
Соединения такого типа называют 'постоянными'.
- Что такое интерфейсы? Используете ли их? Если да - расскажите об этом.
- Интерфейсы — это набор методов класса, доступных для использования другими классами, интерфейсом класса будет являться набор всех его публичных методов в совокупности с набором публичных атрибутов.
- Интерфейс определяет как элементы будут взаимодействовать между собой.
- Что такое абстрактный класс и чем он отличается от интерфейса?
Интерфейсы описывают только часть функциональности объекта — определённые признаки. Абстрактный класс же может описывать целую категорию разных объектов, а его характеристики имеют право наследовать только те объекты, которые являются частью этой категории. Например, собаки и волки — часть общей категории «Животные», а интерфейс, описывающий умение бегать, может реализовать и человек, и робот, и собака.
Интерфейс описывает только поведение (методы), и у него нет полей. Точнее, есть возможность их объявить, но они будут public static final. В то же время абстрактный класс может содержать классические поля, которые будут принадлежать разным объектам.
Наследник абстрактного класса обязан наследовать все его составляющие, а интерфейс создан только для реализации (имплементирования).
Мы не можем создавать объекты абстрактных классов — но в этом и нет смысла.
В абстрактный класс можно добавлять методы с реализацией по умолчанию.
Если мы наследуемся от абстрактного класса, то мы обязаны переопределить все абстрактные методы родительского класса (кроме тех, которые имеют реализацию по умолчанию) или сделать весь дочерний класс абстрактным. Абстрактные методы не имеют тела.
Когда лучше использовать абстрактные классы:
- Вы хотите избежать дублирования кода, реализуя несколько тесно связанных классов из одной семантической категории.
- Классы, которые будут расширять ваш абстрактный класс, имеют много общих свойств и будут реализовывать много похожих методов.
- Наследуемый класс используется в отношении IS-A — то есть класс-наследник только расширяет функциональность абстрактного класса.
- Проект уже частично написан, а вы знаете, что выбранные классы будут часто меняться и дополняться новыми методами и полями. То есть поддерживать абстрактный класс и дополнять его намного проще, чем проектировать интерфейс и добавлять его новые методы во все места в коде, где они должны реализовываться.
Когда лучше использовать интерфейсы:
Вам нужно описать определённую логику, которую должны поддерживать не связанные между собой объекты.
Вам нужно привести к одному типу группу объектов и гарантировать схожую функциональность.
Вам необходимо добавить какой-то маркер, который будет говорить о том, что выбранные классы поддерживают определённую логику. Вы хотите использовать множественное наследование типа.
- Может ли абстрактный класс содержать частный метод?
- Какие модификаторы видимости есть в РНР?
- public — свойство или метод доступны отовсюду. Это значение по умолчанию
- private — свойство или метод могут быть доступны ТОЛЬКО внутри класса
- protected — так как и private, с отличием он доступен наследникам класса
-
Какие магические методы вы знаете и как их применяют?
-
Что такое генераторы и как их использовать?
-
Что делает оператор yield?
-
Что такое traits? Альтернативное решение? Приведите пример.
-
Что такое транзакция?
-
Что такое нормализация?
- Нормализация – это процесс удаления избыточных данных.
- Нормализация – это метод проектирования базы данных, который позволяет привести базу данных к минимальной избыточности.
- Избыточность данных – это когда одни и те же данные хранятся в базе в нескольких местах, именно это и приводит к аномалиям.
- Избыточность устраняется, как правило, за счёт декомпозиции отношений (таблиц), т.е. разбиения одной таблицы на несколько.
-
Что такое денормализации? Для чего она нужна?
- Денормализация- это не результат кривых рук. Это не недоделанная нормализация, это намеренное нарушение нормальных форм, для увеличения производительности.
-
Какие типы связей в базе данных? Связи делятся на:
- Многие ко многим.
- Один ко многим.
- с обязательной связью;
- с необязательной связью;
- Один к одному.
- с обязательной связью;
- с необязательной связью;
-
Что означает утверждение о том, что СУБД поддерживает контроль ссылочной целостности связей?
- Ссылочная целостность – это ограничение базы данных, гарантирующее, что ссылки между данными являются действительно правомерными и неповрежденными. Ссылочная целостность является фундаментальным принципом теории баз данных и проистекает из той идеи, что база данных должна не только сохранять данные, но и активно содействовать обеспечению их качества.
-
csrf связан с куками
-
sql inject sql инъекция это проникновения чужого кода в наш запрос
-
xss
- это внедрение html или js кода