Черты против интерфейсов в PHP

Опубликовано: 4 Февраля, 2022

Основное различие между чертами и интерфейсами в PHP заключается в том, что черты определяют фактическую реализацию каждого метода в каждом классе, поэтому многие классы реализуют один и тот же интерфейс, но имеют разное поведение, в то время как черты - это просто фрагменты кода, внедренные в класс в PHP. .

Черты

Черты - это вовсе не интерфейсы. Черты могут определять как статические члены, так и статические методы. Это помогает разработчикам свободно повторно использовать методы в нескольких независимых классах в разных иерархиях классов. Черты уменьшают сложность и позволяют избежать проблем, связанных с множественным наследованием и миксинами. Обратите внимание, что PHP не допускает множественного наследования. Таким образом, Traits используется для восполнения этого пробела, позволяя нам повторно использовать одни и те же функции в нескольких классах.

Syntax:

<?php
// A sample trait in PHP
trait namethis {
    function ReturnType() {  }
    function ReturnDescription() {  }
}?>

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

Example:

<?php
// PHP program to demonstrate working
// of trait.
trait HelloGeeks {
    public function geeks() {
        echo "Hello World!";
    }
}
  
class Geeksforgeeks {
    use HelloGeeks;
    public function geeks() {
        echo "Hello Geeks!";
    }
}
  
$obj = new Geeksforgeeks();
$obj->geeks();
?>

Выход:

 Привет, выродки!

Интерфейс

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

Syntax:

<?php
// A sample interface in PHP
interface MyInterface
{
 // function...
}

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

Example:

<?php 
// PHP program to demonstrate working
// of interface.
interface MyInterface{ 
  
    public function examplemethod1(); 
    public function examplemethod2(); 
  
  
class MyClass implements MyInterface{ 
  
    public function examplemethod1(){ 
        echo "ExampleMethod1 Called" . " "
    
  
    public function examplemethod2(){ 
        echo "ExampleMethod2 Called". " "
    
  
$ob = new MyClass; 
$ob->examplemethod1(); 
$ob->examplemethod2(); 
  
?> 

Выход:

Вызывается ExampleMethod1
Вызывается ExampleMethod2