Создание 2 интерфейсов в php с одинаковым именем метода и реализация его в производном классе

#php #class #interface #abstract

#php #класс #интерфейс #аннотация

Вопрос:

Я создаю 2 интерфейса в PHP с тем же именем метода и реализую его в производном классе. Итак, как я могу узнать, какой из интерфейсов используется?

 <?php
    interface car{
        public function intro();
        public function carName():string;
    }
    interface car2{
        public function intro();
        public function carName():string;
    }
    class price{
        protected $volvo="$50000";
        protected $audi="$86000";
        protected $buggati="$960000";
        protected $tata="$7000";
    }
    class model extends price implements car,car2{
        public $name;
        public $price="None";
        function __construct($n){
            $this->name=$n;
        }
        public function intro(){
            print"Welcome to the ".$this->name."'s showroom.<br>";
        }
        public function carName():string{        
            if ($this->name=="Volvo"){
                $this->price=$this->volvo;
            }
            return $this->name."'s car starting price - ".$this->price;
        }
    }
    $ob=new model("Volvo");
    $ob->intro();
    echo $ob->carName()."<br>";    
?>
  

Комментарии:

1. Почему это имеет значение, именно? Однако это довольно подозрительно, поскольку, вероятно, означает, что вы должны иметь общий базовый интерфейс вместо дублирования контракта. Чего вы пытаетесь достичь?

Ответ №1:

     Reflection::export(new ReflectionClass('model'));
  

Полная информация о классе и его функциях

 Class [ <user> class model extends price implements car, car2 ] {
  @@ C:index.php 16-31

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [6] {
    Property [ <default> public $name ]
    Property [ <default> public $price ]
    Property [ <default> protected $volvo ]
    Property [ <default> protected $audi ]
    Property [ <default> protected $buggati ]
    Property [ <default> protected $tata ]
  }

  - Methods [3] {
    Method [ <user, ctor> public method __construct ] {
      @@ C:index.php 19 - 21

      - Parameters [1] {
        Parameter #0 [ <required> $n ]
      }
    }

    Method [ <user, prototype car2> public method intro ] {
      @@ C:index.php 22 - 24
    }

    Method [ <user, prototype car2> public method carName ] {
      @@ C:index.php 25 - 30

      - Parameters [0] {
      }
      - Return [ string ]
    }
  }
}