Ошибка при вызове метода интерфейса в php

Привет, ребята, у меня есть этот пример кода, и я хочу вызвать метод, подобный этому коду:

<?php
interface Item{
    function getRes();
}

class Weapon implements Item{
    public function getRes(){
        echo "Res";
    }
}

abstract class Player implements Item{
     public function defend(){
           $this->Item->Weapon->getRes();
     }
}
?>

Я знаю, что это не работает, но как лучше всего сделать этот звонок.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы наследуете класс Item в player (что я не думаю, что player является типом элемента;)), вам необходимо реализовать функцию getRes.

Отойдя от этого, вы, скорее всего, захотите положиться на внедрение зависимостей (DI), чтобы ваш игрок мог получить оружие.

interface Item {
  function getResponse();
}

interface AttackItem extends Item {
}

interface DefenseItem extends Item {
}

class Sword implements AttackItem {
  public function getResponse(){
    return "Swing of the sword!";
  }
}

class Shield implements DefenseItem {
  public function getResponse(){
    return "Defend with the shield!";
  }
}

class Player {
  public function __construct(AttackItem $attackItem, DefenseItem $defenseItem) {
    $this->attackItem = $attackItem;
    $this->defenseItem = $defenseItem;
  }

  public function attack(){
    return $this->attackItem->getResponse();
  }
  public function defend(){
    return $this->defenseItem->getResponse();
  }
}

$player = new Player(new Sword(), new Shield());

echo $player->attack() . "\n";
echo $player->defend() . "\n";

Другие вопросы по теме