Oop 如何使用函数式编程编写此代码

Oop 如何使用函数式编程编写此代码,oop,functional-programming,Oop,Functional Programming,我正在学习面向对象和函数式编程。我在youtube上找到了一个非常好且简短的例子(如果你知道更好的例子,请建议),用10分钟解释OOP,耶! 现在,我想学习如何以函数的方式编写此代码——具有不变性、递归、无循环等 DEMO.PHP <?php Include_once(“player.php”); $p1 = new player(); $p1->name = “Brutus”; $p1->type = “Warrior”; $p1->hitpoints = 100;

我正在学习面向对象和函数式编程。我在youtube上找到了一个非常好且简短的例子(如果你知道更好的例子,请建议),用10分钟解释OOP,耶!

现在,我想学习如何以函数的方式编写此代码——具有不变性、递归、无循环等

DEMO.PHP
<?php
Include_once(“player.php”);

$p1 = new player();
$p1->name = “Brutus”;
$p1->type = “Warrior”;
$p1->hitpoints = 100;

$p2 = new player();
$p2->name = “Mysterio”;
$p2->type = “Sorcerer”;
$p2->hitpoints = 100;

$p1->meleeAttack($p2);
$p2->meleeAttack($p1);

Echo “<h1> Fight Results</h1>”;
Echo “<h2>.$p1->name.” now has “.$p1->hitpoints.” hit points</h2>”;
Echo “<h2>.$p2->name.” now has “.$p2->hitpoints.” hit points</h2>”;
?>


PLAYER.PHP
<?php
Class player {

    public $name;
    public $type;
    public $hitpoints;
    public function meleeAttack($target){
        $current_hp = $target->hitpoints;   // hp is for hitpoints
        $damage = rand(10,20);
        if($this->type == “Warrior”) {      // condition logic
            $damage += 10;
        }
        $target->hitpoints = $current_hp - $damage;
    }
}

?>
DEMO.PHP
PLAYER.PHP
干杯,
另外,我知道,PHP不是函数式编程的首选语言,无需提醒:)

我将解释如何使用PHP进行函数式编程,因为我不懂PHP:

导入系统随机(randomRIO)
--数据声明
数据类=战士|导出Eq的巫师
数据播放器=播放器{name::String
,原型::类
,hitpoints::Int
}
--示例数据
p1::播放器
p1=玩家“布鲁特斯”战士100
p2::播放器
p2=玩家“神秘”法师100
--代码段
meleeAttack::玩家->玩家->IO玩家
source`meleeAttack`target=do

损坏我将解释如何使用进行函数式编程,因为我不懂PHP:

导入系统随机(randomRIO)
--数据声明
数据类=战士|导出Eq的巫师
数据播放器=播放器{name::String
,原型::类
,hitpoints::Int
}
--示例数据
p1::播放器
p1=玩家“布鲁特斯”战士100
p2::播放器
p2=玩家“神秘”法师100
--代码段
meleeAttack::玩家->玩家->IO玩家
source`meleeAttack`target=do

损害它不会有太大的不同;您没有要替换的循环。基本上,您将
meleeAttack
作为一个函数,该函数将两个玩家作为参数,并返回一个生命值降低的新玩家,而不是一个变异玩家的方法。你处理随机伤害的方式会有所不同,这取决于你是否使用纯函数式语言。我不明白,“…返回一个带有…”部分的新玩家。一个老球员会怎么样?程序如何知道哪个玩家是最近的?我需要查看代码:(不是更新包装属性,而是用一个相同的新对象替换现有的播放器,只是它的生命点较少。
meleeAttack
变得有点像复制构造函数,只是它制作的“复制”与原始的略有不同(具体来说,它的生命点较少).如果玩家1攻击玩家2,您将编写类似于
$p2=meleeAttack($p1,$p2)的代码
。该函数将攻击者及其目标作为参数,并返回目标的修改副本。它不会有太大的不同;您没有可替换的循环。基本上,您使
meleeAttack
成为一个函数,该函数将两个玩家作为参数,并返回一个具有较低生命值的新玩家,而不是使用变异玩家。你如何处理随机伤害会有所不同,这取决于你是否使用纯函数语言。我不明白,“…返回一个带有…”部分的新玩家。老玩家会发生什么情况?程序如何知道哪个玩家是最近的?我需要查看代码:(不是更新包装属性,而是用一个相同的新对象替换现有玩家,只是它的生命点较少。
meleeAttack
变得有点像复制构造函数,只是它生成的“复制”与原始的略有不同(具体来说,它的生命点较少).如果玩家1攻击玩家2,您将编写类似于
$p2=meleeAttack($p1,$p2)的代码
。该函数将攻击者及其目标作为参数,并返回目标的修改副本。能否使用类、对象属性和方法以OOP方式编写此Haskel代码?很抱歉,我正在学习,我希望看到OOP和func之间的比较。在函数式编程中没有OOP意义上的对象ing.
Player
数据类型封装了PHP类跟踪的状态,但您编写的函数不是更新给定对象的方法,而是返回反映函数参数更改的新对象。这段Haskel代码可以使用类、对象属性和方法以OOP方式编写吗?对不起,我是learning和我想看到OOP和func之间的比较。在函数编程中,您没有OOP意义上的对象。
Player
数据类型封装PHP类跟踪的状态,但您编写的函数将返回反映函数更改的新对象论点