Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中调用接口方法时出错_Php - Fatal编程技术网

在php中调用接口方法时出错

在php中调用接口方法时出错,php,Php,嘿,伙计们,我有这个示例代码,我想像下面这样调用这个方法: <?php interface Item{ function getRes(); } class Weapon implements Item{ public function getRes(){ echo "Res"; } } abstract class Player implements Item{ public function defend(){

嘿,伙计们,我有这个示例代码,我想像下面这样调用这个方法:

<?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();
     }
}
?>


我知道这不起作用,但如何做才是最好的调用方式。

如果要在player中继承Item类(我认为player不是Item;)的一种类型,则需要实现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";