Тема: Шпаргалки PHP

1

Шпаргалка по ООП с примерами (трейты, интерфейсы, классы)
Трейты - Это набор методов и свойств для использования в классе. Решает проблему дублирования кода. Трейты используются, когда нужно набор методов вставить в разные классы, не присваивая экземплярам класса новый тип, как при использовании абстрактных классов или интерфейсов, они чем-то похожи на команду include. Реализовываются трейты с помощью ключевого слова trait. За ним указывается имя трейта, а потом в фигурных скобках указывается тело трейта, то есть методы и свойства, которые вы считаете нужным поместить в него. После объявления трейта его можно использовать при создании собственных классов. Для этого используется ключевое слово use. Невозможно создать самостоятельный экземпляр трейта.
Пример создания двух трейтов, класса, реализованного на их основе, и вызов его метода:
trait someTrait {
public function doStuff(){
echo "Метод doStuff трейта someTrait.";
}
}
trait otherTrait {
public function doOtherStuff(){
echo "Метод doOtherStuff трейта otherTrait.";
}
}
class someClass {
use someTrait, otherTrait;
}
someClass::doOtherStuff();

Пример для переопределения методов:
trait someTrait {
public function doStuff(){
echo "Метод doStuff трейта someTrait.";
}
}
trait otherTrait {
public function doStuff(){
echo "Метод doStuff трейта otherTrait.";
}
}
class someClass {
use someTrait, otherTrait {
someTrait::doStuff insteadof otherTrait;
otherTrait::doStuff as otherStuff;
}
}
someClass::otherStuff();

Интерфейсы -  это список методов, которые должны быть реализованы в наследующем интерфейс классе. Обращаю внимание, интерфейс — это лишь список методов. Для создания интерфейса в PHP используют слово interface, за ним идёт имя интерфейса, потом в круглых скобках {...} список методов. Интерфейс может быть реализован в классе, правильно использовать именно это слово — "реализован", а не слово "унаследован". Если вы хотите в каком-то классе реализовать интерфейс, то для этого используется ключевое слово implements, которое с английского переводится как "реализует". Отличается от абстрктного класса тем, что содержит только определение методов, которые должны быть реализованы в классе, а абстрактный класс содержит описание этих методов.
Пример создания интерфейса, затем класса на его основе, реализующего этот интерфейс:
interface Planes{
public function TakeOff(); // взлёт
public function Landing(); // посадка
}
class Boing implements Planes{

public function TakeOff()
{
// Реализуем метод TakeOff() интерфейса Planes.
return "Взлёт";
}
public function Landing()
{
// Реализуем метод Landing() интерфейса Planes.
return "Посадка";
}
}
echo Boing::TakeOff();

Абстрактные классы - используются как шаблоны, на их основе создаются классы с гарантированным набором методов. Причём, в абстрактных классах можно прописывать обычные и абстрактные методы. Абстрактные классы в PHP отличаются от обычных тем, что нельзя создать их объекты. Абстрактные классы создаются для того, чтобы на их основе, используя наследование в PHP, создавать новые классы. Абстрактный класс определяется с помощью ключевого слова abstract. В абстрактном классе можно создавать свойства и методы, но попытка инициализировать объект этого класса приведёт к ошибке. В любом абстрактном классе имеет смысл создать хоть один абстрактный метод. Абстрактный метод также описывается при помощи слова abstract. В отличии от обычного метода он не имеет тела, его объявление заканчивается точкой с запятой. Отличается от интерфейса тем, что содержит описание методов, а интерфейс содержит только определение методов, которые должны быть реализованы в классе. Абстрактные классы в PHP используются при написании больших проектов, таких как фреймворки. Абстрактные классы упрощают работу команды программистов, позволяя гарантировать наличие требуемого функционала во всех классах, написание которых может быть поручено работникам с разных стран.
Пример создания абстрактного класса и класса на его основе, а затем объекта:
abstract class Dad
{
public function SayHi() {
return "Hi";
}
abstract public function SayHello();
}
class Son extends Dad
{
public function SayHello() {
return "Hello";
}
}
$son = new Son;
echo $son->SayHello().' and '.$son->SayHi();

Классы - это набор методов и свойств, то есть шаблон, на основе которого может быть создан объект, выполняющий функции и имеющий свойства, используемые в классе. Может унаследовать свойства австрактного класса, то есть можно всё основное записать в абстрактном классе, при создании класса унаследовать его свойства и добавить свои новые.
Пример:
Объявление класса:
class User
{
    public $name;
    public $age;

    public function Describe()
    {
        return $this->name . " is " . $this->age . " years old";
    }
}

Объекты - это сущность, созданная по шаблону (классу) и имеющая его свойства и функции.
Пример:
Создание объекта и обращение к нему:
$user = new User();
$user->name = "John Doe";
$user->age = 42;
echo $user->Describe();

Свойства - это характеристики объекта, то есть его переменные.
Пример задания переменных:
$user->name = "John Doe";
$user->age = 42;

Методы - это функции объекта, которые описывают его поведение или выполняемые задачи.
Пример вызова метода (то есть функции) объекта:
echo $user->Describe();
Пример вызова переменной объекта:
echo $user->name;

Желаю удачи!
1

Другие темы: