При наследовании объектов, потомок с унаследованными методами имеет доступ к статическим константам, методам и свойствам своего класса в этих унаследованных методах, а не только родительского класса.

Обращение к константам, методам и свойствам своего класса организовано через слово static:: которое должно быть прописано в методе родителя, вместо обычного обращения через self::

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

В php используется одиночное наследование, это значить что нельзя быть сразу наследником двух классов. Для решения данной проблемы есть trait и магический метод __call.

Наследование осуществляется при помощи ключевого слова extend

Инкапсуляция - это способность объектов инкапсулировать в себе свойства и методы.

В php это просто возможность создавать свойства и различные методы в объектах, так мы формируем зависимости между ними.

Также для инкапсуляции используются модификаторы доступа для данных структур, а с php 7.1 еще и для констант.

  • Инкапсулируйте все, что может изменяться. Доступ только для
  • Уделяйте больше внимания интерфейсам, а не их реализациям;
  • Класс должен иметь только одно назначение и выполнять его максимально быстро и хорошо
  • Абстракция — отделение концепции от ее экземпляра;
  • Полиморфизм — реализация задач одной и той же идеи разными способами;
  • Наследование — способность объекта или класса базироваться на другом объекте или классе. Это главный механизм для повторного использования кода. Наследственное отношение классов четко определяет их иерархию;
  • Инкапсуляция — размещение одного объекта или класса внутри другого для разграничения доступа к ним.

Не повторяйся (Don’t repeat yourself — DRY)
Нужно не писать одинаковый код, лучше выделить часто используемые действия и данные в абстракции. Любой код в приложении должен повторяться только единожды.

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

SOLID
Принцип открытости/закрытости
Любые объекты должны быть открыты для расширения, но закрыты для внесение в них изменений.

SOLID
Принцип подстановки Барбары Лисков LSP
Методы, которые получают в параметрах объект с неким типом, должны иметь возможность работать с объектами наследующими данные тип.Наследующий класс должен дополнять, а не изменять базовый

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

SOLID
Принцип инверсии зависимостей
Все приложение должно быть создано по принципу абстракций “сверху вниз”: не абстракции нужно создавать на основе деталей, а детали должны создаваться на основе абстракций.

Делайте вещи проще (keep it short and simple - KISS)
Не стоит перегружать интерфейс теми опциями, которые не будут нужны большинству пользователей, гораздо проще предусмотреть для них отдельный «расширенный» интерфейс.

YAGNI
Следование данному принципу заключается в том, что возможности, которые не описаны в требованиях к системе, просто не должны реализовываться. Это устранение тяги программистов к излишней абстракции.

 

 

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

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

Область видимости свойства, метода или константы (начиная c PHP 7.1.0) - это возможность инкапсулировать данные.

Доступ к свойствам и методам класса, объявленным как public (общедоступный), разрешен отовсюду.

Модификатор protected (защищенный) разрешает доступ самому классу, наследующим его классам и родительским классам.

Модификатор private (закрытый) ограничивает область видимости так, что только класс, где объявлен сам элемент, имеет к нему доступ.

Выражение include включает и выполняет указанный файл.

require аналогично include, за исключением того, что при ошибке он также выдаст фатальную ошибку уровня E_COMPILE_ERROR. Другими словами, он остановит выполнение скрипта, тогда как include только выдал бы предупреждение E_WARNING, которое позволило бы скрипту продолжить выполнение.

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