html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>策略模式</title> </head> <body> <form action='./demo03.php' method="post"> <input type="text" name="op1"> <select name="op"> <option value="Add">+</option> <option value="Sub">-</option> <option value="Multi">*</option> <option value="div">/</option> </select> <input type="text" name="op2"> <p><input type="submit" name="" value="计算"></p> </form> </body> </html>
PHP:
<?php /** * 策略模式 * * 实现加减乘除 */ interface MathOp { public function calculation(float $num1, float $num2); } //策略一 加 class MathAdd implements MathOp { public function calculation(float $num1, float $num2) { // TODO: Implement calculation() method. return $num1+$num2; } } //策略二 减 class MathSub implements MathOp { public function calculation(float $num1, float $num2) { // TODO: Implement calculation() method. return $num1-$num2; } } //策略三 乘 class MathMulti implements MathOp { public function calculation(float $num1, float $num2) { // TODO: Implement calculation() method. return $num1*$num2; } } class MathDiv implements MathOp { public function calculation(float $num1, float $num2) { // TODO: Implement calculation() method. if( $num2 == 0) { return "被除数不能为0"; } return $num1/$num2; } } //环境角色 选择策略实现 class op { private $mathop; public function __construct(string $type) { $this->mathop = 'Math'.$type; } public function calc (float $num1, float $num2) { $cls = new $this->mathop; echo $cls->calculation($num1, $num2); } } $type = $_POST['op']; $op1 = $_POST['op1']; $op2 = $_POST['op2']; $obj = new op($type); $obj->calc($op1, $op2);