1. 程式人生 > >php教程_php視訊教程_網頁程式碼_php學習_phpcms_php安裝

php教程_php視訊教程_網頁程式碼_php學習_phpcms_php安裝

<?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, '+');