Привет, ребята, у меня есть этот пример кода, и я хочу вызвать метод, подобный этому коду:
<?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();
}
}
?>
Я знаю, что это не работает, но как лучше всего сделать этот звонок.






Если вы наследуете класс 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";