Черты против интерфейсов в PHP
Основное различие между чертами и интерфейсами в PHP заключается в том, что черты определяют фактическую реализацию каждого метода в каждом классе, поэтому многие классы реализуют один и тот же интерфейс, но имеют разное поведение, в то время как черты - это просто фрагменты кода, внедренные в класс в PHP. .
Черты
Черты - это вовсе не интерфейсы. Черты могут определять как статические члены, так и статические методы. Это помогает разработчикам свободно повторно использовать методы в нескольких независимых классах в разных иерархиях классов. Черты уменьшают сложность и позволяют избежать проблем, связанных с множественным наследованием и миксинами. Обратите внимание, что PHP не допускает множественного наследования. Таким образом, Traits используется для восполнения этого пробела, позволяя нам повторно использовать одни и те же функции в нескольких классах.
Syntax:
| <?php// A sample trait in PHPtraitnamethis {    functionReturnType() {  }    functionReturnDescription() {  }}?> | 
Черты не могут реализовывать интерфейсы. Типаж позволяет обоим классам использовать его для общих требований к интерфейсу. Он поддерживает использование абстрактных методов. Это обеспечивает горизонтальную компоновку поведения по отношению к традиционному наследованию. Черты - это механизм повторного использования кода в языках с единичным наследованием, таких как PHP. Напишите тот же код еще раз, чтобы избежать этого, используйте трейты. Черты используются, когда несколько классов имеют одну и ту же функциональность.
Example:
| <?php// PHP program to demonstrate working// of trait.traitHelloGeeks {    publicfunctiongeeks() {        echo"Hello World!";    }} classGeeksforgeeks {    useHelloGeeks;    publicfunctiongeeks() {        echo"Hello Geeks!";    }} $obj= newGeeksforgeeks();$obj->geeks();?> | 
Выход:
Привет, выродки!
Интерфейс
Он определяет списки всех таких методов, которые должен реализовать класс. Используйте ключевое слово Interface для реализации интерфейса, аналогичного классу. Он может расширять интерфейс с помощью оператора extends. Все методы в интерфейсе являются абстрактными методами и могут иметь свои собственные константы. Существует концепция конкретного класса, который представляет собой класс, реализующий интерфейс, который должен реализовывать все методы с одинаковыми именами и подписями.
 Все методы в интерфейсе должны иметь публичный уровень доступа.
Syntax:
| <?php// A sample interface in PHPinterfaceMyInterface{ // function...} | 
Никакие два интерфейса не могут быть реализованы конкретным классом с одинаковым именем метода и сигнатурами, потому что он дает ошибку. Также помогает при множественном наследовании, поскольку класс может реализовывать более одного интерфейса, тогда как он может расширять только один класс. Реализации можно изменять, не затрагивая вызывающую сторону интерфейса.
Example:
| <?php // PHP program to demonstrate working// of interface.interfaceMyInterface{      publicfunctionexamplemethod1();     publicfunctionexamplemethod2();  }  classMyClass implementsMyInterface{      publicfunctionexamplemethod1(){         echo"ExampleMethod1 Called". "
";     }      publicfunctionexamplemethod2(){         echo"ExampleMethod2 Called". "
";     } }  $ob= newMyClass; $ob->examplemethod1(); $ob->examplemethod2();  ?>  | 
Выход:
Вызывается ExampleMethod1 Вызывается ExampleMethod2