Abstrakcyjne metody traitów w OOP w PHP

W traitach niektóre metody można deklarować jako abstrakcyjne. W takim przypadku klasa używająca tego traita będzie zobowiązana do zaimplementowania takiej metody. Jednocześnie abstrakcyjne metody traita nie mogą być prywatne.

Spójrzmy na przykład. Załóżmy, że mamy taki trait:

TestTrait.php<?php
  trait TestTrait
  {
    public function method1()
    {
      return 1;
    }
    
    abstract public function method2();
  }
?>

Załóżmy, że nasz trait jest używany przez klasę Test. Obecność metody abstrakcyjnej w traicie zobliguje programistę do jej zaimplementowania w klasie, w przeciwnym razie wystąpi błąd PHP.

Stwórzmy klasę Test razem z metodą method2:

Test.php<?php
  class Test
  {
    use TestTrait; // używamy traita
    
    // Implementujemy metodę abstrakcyjną:
    public function method2()
    {
      return 2;
    }
  }
  
  new Test;
?>
Задание 1

Skopiuj kod mojego traita TestTrait i kod mojej klasy Test. Usuń z klasy metodę method2. Upewnij się, że brak jej implementacji prowadzi do błędu PHP.