php教程_php視訊教程_網頁程式碼_php學習_phpcms_php安裝
阿新 • • 發佈:2018-12-16
<?php //利用簡單的工作類實現 計算器 加減乘除 //虛基類 abstract class Operator{ //設為保護 除法的時候需要訪問 protected $NumA; protected $NumB; //建構函式 public function __construct($parmasFirst, $parmasSecond){ $this->NumA = $parmasFirst; $this->NumB = $parmasSecond; } //虛擬函式 abstract function getResult(); } //加法類 class OperatorAdd extends Operator{ //建構函式 public function __construct($parmasFirst, $parmasSecond){ parent::__construct($parmasFirst, $parmasSecond); } //解構函式 public function __destruct(){ } //操作 public function getResult(){ return $this->NumA + $this->NumB; } } //減法 class OperatorSub extends Operator{ //建構函式 public function __construct($parmasFirst, $parmasSecond){ parent::__construct($parmasFirst, $parmasSecond); } //解構函式 public function __destruct(){ } //操作 public function getResult(){ return $this->NumA - $this->NumB; } } //乘法 class OperatorMul extends Operator{ //建構函式 public function __construct($parmasFirst, $parmasSecond){ parent::__construct($parmasFirst, $parmasSecond); } //解構函式 public function __destruct(){ } //操作的方法 public function getResult(){ return $this->NumA * $this->NumB; } } //除法 class OperatorDiv extends Operator{ //建構函式 public function __construct($parmasFirst, $parmasSecond){ parent::__construct($parmasFirst, $parmasSecond); } //解構函式 public function __destruct(){ } //操作的方法 public function getResult(){ if ($this->NumB == 0) { throw new Exception("被除數不能為0", 1); return 0; } return $this->NumA / $this->NumB; } } //工廠類 class OperatorFactory{ //用於符號和類的轉換 public $operatorTag = array( '*' => 'mul', '/' => 'div', '-' => 'sub', '+' => 'add' ); //建構函式 public function __construct(){ } //解構函式 public function __destruct(){ } public function create($NumA, $NumB, $tag){ try{ //判斷是否有此操作符 $tag = strtolower($tag); //轉為小寫 if(!array_key_exists($tag , $this->operatorTag)) { throw new Exception('no operator tag'); return; } //獲取操作類名稱 $operatorName = $this->operatorTag[$tag]; $operatorClassName = 'operator'.ucfirst($operatorName); //操作類是否存在 if(!class_exists($operatorClassName)) { throw new Exception('no operator class'); return; } //建立類並執行操作 $operationObj = new $operatorClassName( $NumA, $NumB); $result = $operationObj->getResult(); $operationObj = null; return $result; }catch(Exception $e){ $msg = $e->getmessage(); die($msg); return 0; } } } //這邊進行測試 $test = new OperatorFactory(); echo $test->create( 3, 1, '+');